summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2019-04-16 02:15:27 +0200
committer couriersud <couriersud@gmx.org>2019-04-17 19:58:11 +0200
commit3afd7126372d9a88dd66755e05a3daf8a39abd14 (patch)
treea05c2164b2d4349e557793411bea3c9d0ef80d01
parentced8e963beb0bdbcccb803a63fc8a2868fb268da (diff)
plib: mempool refactoring. (nw)
-rw-r--r--src/lib/netlist/plib/pmempool.h43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/lib/netlist/plib/pmempool.h b/src/lib/netlist/plib/pmempool.h
index 87c74e14856..5242d2783ac 100644
--- a/src/lib/netlist/plib/pmempool.h
+++ b/src/lib/netlist/plib/pmempool.h
@@ -119,38 +119,34 @@ namespace plib {
void *allocate(size_t align, size_t size)
{
+ block *b = nullptr;
+
if (align < m_min_align)
align = m_min_align;
size_t rs = size + align;
- for (auto &b : m_blocks)
+ for (auto &bs : m_blocks)
{
- if (b->m_free > rs)
+ if (bs->m_free > rs)
{
- b->m_free -= rs;
- b->m_num_alloc++;
- auto *ret = reinterpret_cast<void *>(b->m_data + b->m_cur);
- auto capacity(rs);
- ret = std::align(align, size, ret, capacity);
- sinfo().insert({ ret, info(b, b->m_cur)});
- rs -= (capacity - size);
- b->m_cur += rs;
-
- return ret;
+ b = bs;
+ break;
}
}
+ if (b == nullptr)
{
- block *b = new_block(rs);
- b->m_num_alloc = 1;
- b->m_free = m_min_alloc - rs;
- auto *ret = reinterpret_cast<void *>(b->m_data + b->m_cur);
- auto capacity(rs);
- ret = std::align(align, size, ret, capacity);
- sinfo().insert({ ret, info(b, b->m_cur)});
- rs -= (capacity - size);
- b->m_cur += rs;
- return ret;
+ b = new_block(rs);
}
+ b->m_free -= rs;
+ b->m_num_alloc++;
+ void *ret = reinterpret_cast<void *>(b->m_data + b->m_cur);
+ auto capacity(rs);
+ ret = std::align(align, size, ret, capacity);
+ sinfo().insert({ ret, info(b, b->m_cur)});
+ rs -= (capacity - size);
+ b->m_cur += rs;
+
+ return ret;
}
static void deallocate(void *ptr)
@@ -159,8 +155,7 @@ namespace plib {
auto it = sinfo().find(ptr);
if (it == sinfo().end())
plib::terminate("mempool::free - pointer not found\n");
- info i = it->second;
- block *b = i.m_block;
+ block *b = it->second.m_block;
if (b->m_num_alloc == 0)
plib::terminate("mempool::free - double free was called\n");
else