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) {
size_t newCapacity = pool->pageCapacity << 1;
void **newPages = bzResize(pool->pages, sizeof(*newPages) * newCapacity);
BZ_ASSERT(newPages);
pool->pages = newPages;
pool->pageCapacity = newCapacity;
}
@@ -75,13 +74,8 @@ BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc) {
size_t objectsPerPage = desc->objectsPerPage;
void *firstPage = bzAlloc(stride * objectsPerPage);
BZ_ASSERT(firstPage);
size_t pageCapacity = 8;
void **pages = bzAlloc(sizeof(*pages) * pageCapacity);
BZ_ASSERT(pages);
pages[0] = firstPage;
BzObjectPool *pool = bzAlloc(sizeof(*pool));
*pool = (BzObjectPool) {
@@ -97,6 +91,12 @@ BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc) {
return 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);
}