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) {
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user