Fix memory leak in object pool
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user