Fix memory leak in object pool

This commit is contained in:
2023-12-29 19:14:22 +01:00
parent e852fcc791
commit c3001ea4bc

View File

@@ -49,7 +49,6 @@ static void addNewPage(BzObjectPool *pool) {
if (pool->pageSize >= pool->pageCapacity) { if (pool->pageSize >= pool->pageCapacity) {
size_t newCapacity = pool->pageCapacity << 1; size_t newCapacity = pool->pageCapacity << 1;
void **newPages = bzResize(pool->pages, sizeof(*newPages) * newCapacity); void **newPages = bzResize(pool->pages, sizeof(*newPages) * newCapacity);
BZ_ASSERT(newPages);
pool->pages = newPages; pool->pages = newPages;
pool->pageCapacity = newCapacity; pool->pageCapacity = newCapacity;
} }
@@ -75,13 +74,8 @@ BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc) {
size_t objectsPerPage = desc->objectsPerPage; size_t objectsPerPage = desc->objectsPerPage;
void *firstPage = bzAlloc(stride * objectsPerPage);
BZ_ASSERT(firstPage);
size_t pageCapacity = 8; size_t pageCapacity = 8;
void **pages = bzAlloc(sizeof(*pages) * pageCapacity); void **pages = bzAlloc(sizeof(*pages) * pageCapacity);
BZ_ASSERT(pages);
pages[0] = firstPage;
BzObjectPool *pool = bzAlloc(sizeof(*pool)); BzObjectPool *pool = bzAlloc(sizeof(*pool));
*pool = (BzObjectPool) { *pool = (BzObjectPool) {
@@ -97,6 +91,12 @@ BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc) {
return pool; return pool;
} }
void bzObjectPoolDestroy(BzObjectPool *pool) { void bzObjectPoolDestroy(BzObjectPool *pool) {
for (size_t i = 0; i < pool->pageSize; i++) {
bzFree(pool->pages[i]);
pool->pages[i] = NULL;
}
bzFree(pool->pages);
pool->pages = NULL;
bzFree(pool); bzFree(pool);
} }