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