From 0bedcceeaacaf2acfed14c090351b26a51185111 Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi.kivity@gmail.com> Date: Tue, 1 Jan 2013 22:35:48 +0200 Subject: [PATCH] mempool: repsect minimum object size Must be large enough to hold a free_object. --- mempool.cc | 5 ++--- mempool.hh | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mempool.cc b/mempool.cc index f5481e3ae..ee6675d6f 100644 --- a/mempool.cc +++ b/mempool.cc @@ -40,6 +40,7 @@ pool::~pool() } const size_t pool::max_object_size = page_size - sizeof(pool::page_header); +const size_t pool::min_object_size = sizeof(pool::free_object); pool::page_header* pool::to_header(free_object* object) { @@ -233,10 +234,8 @@ extern "C" { void* malloc(size_t size) { - if (size == 0) { - size = 1; - } if (size <= memory::pool::max_object_size) { + size = std::max(size, memory::pool::min_object_size); unsigned n = ilog2_roundup(size); return memory::malloc_pools[n].alloc(); } else { diff --git a/mempool.hh b/mempool.hh index 0cde5f7a7..e5c77b229 100644 --- a/mempool.hh +++ b/mempool.hh @@ -34,6 +34,7 @@ private: free_object* _free; public: static const size_t max_object_size; + static const size_t min_object_size; }; struct pool::page_header { -- GitLab