tables: Adjust pre-allocated CS entry queue on Cs::setLimit call

Change-Id: I7611dfb671060864e40cadb707ad0a89f0359c07
Fixes: #1646
This commit is contained in:
Alexander Afanasyev
2014-06-08 10:15:20 +03:00
parent 3fff5614a5
commit 281b916a35
2 changed files with 33 additions and 4 deletions
+15 -4
View File
@@ -71,13 +71,24 @@ Cs::size() const
void
Cs::setLimit(size_t nMaxPackets)
{
size_t oldNMaxPackets = m_nMaxPackets;
m_nMaxPackets = nMaxPackets;
while (isFull())
{
if (!evictItem())
break;
while (size() > m_nMaxPackets) {
evictItem();
}
if (m_nMaxPackets >= oldNMaxPackets) {
for (size_t i = oldNMaxPackets; i < m_nMaxPackets; i++) {
m_freeCsEntries.push(new cs::Entry());
}
}
else {
for (size_t i = oldNMaxPackets; i > m_nMaxPackets; i--) {
delete m_freeCsEntries.front();
m_freeCsEntries.pop();
}
}
}
size_t