diff --git a/lib/isc/mem.c b/lib/isc/mem.c index 766302d1e0..aa3b900d6c 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -1841,6 +1841,12 @@ isc__mempool_create(isc_mem_t *mctx0, size_t size, isc_mempool_t **mpctxp) { mpctx->common.magic = ISCAPI_MPOOL_MAGIC; mpctx->lock = NULL; mpctx->mctx = mctx; + /* + * Mempools are stored as a linked list of element. + */ + if (size < sizeof(element)) { + size = sizeof(element); + } mpctx->size = size; mpctx->maxalloc = UINT_MAX; mpctx->allocated = 0; diff --git a/lib/isc/tests/mem_test.c b/lib/isc/tests/mem_test.c index a32b33ae5a..d9d2384149 100644 --- a/lib/isc/tests/mem_test.c +++ b/lib/isc/tests/mem_test.c @@ -137,6 +137,21 @@ ATF_TC_BODY(isc_mem, tc) { isc_mem_destroy(&localmctx); + result = isc_mem_createx2(0, 0, default_memalloc, default_memfree, + NULL, &localmctx, + ISC_MEMFLAG_FILL | ISC_MEMFLAG_INTERNAL); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_mempool_create(localmctx, 2, &mp1); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + tmp = isc_mempool_get(mp1); + ATF_CHECK(tmp != NULL); + + isc_mempool_put(mp1, tmp); + + isc_mempool_destroy(&mp1); + isc_test_end(); }