tables: Adjust pre-allocated CS entry queue on Cs::setLimit call
Change-Id: I7611dfb671060864e40cadb707ad0a89f0359c07 Fixes: #1646
This commit is contained in:
1 parent
3fff5614a5
commit
281b916a35
2 files changed
+33
-4
No files matched your search
+15
-4
@@ -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
|
||||
|
||||
@@ -44,6 +44,24 @@ public:
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(TableCs, BaseFixture)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(SetLimit)
|
||||
{
|
||||
Cs cs(1);
|
||||
|
||||
BOOST_CHECK_EQUAL(cs.insert(*makeData("/1")), true);
|
||||
BOOST_CHECK_EQUAL(cs.insert(*makeData("/2")), true);
|
||||
BOOST_CHECK_EQUAL(cs.size(), 1);
|
||||
|
||||
cs.setLimit(3);
|
||||
BOOST_CHECK_EQUAL(cs.insert(*makeData("/3")), true);
|
||||
BOOST_CHECK_EQUAL(cs.insert(*makeData("/4")), true);
|
||||
BOOST_CHECK_EQUAL(cs.insert(*makeData("/5")), true);
|
||||
BOOST_CHECK_EQUAL(cs.size(), 3);
|
||||
|
||||
cs.setLimit(2);
|
||||
BOOST_CHECK_EQUAL(cs.size(), 2);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(Insertion)
|
||||
{
|
||||
Cs cs;
|
||||
|
||||
Reference in new issue
Block a user