|
|
|
|
@ -29,8 +29,8 @@ static void pool_check_and_clear_tags(struct memory_pool* pool, void* obj, const
|
|
|
|
|
uint8_t* counter = (uint8_t*)obj + POOL_COUNTER_OFF; |
|
|
|
|
|
|
|
|
|
if (*canary != POOL_CANARY_VAL) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "pool_free BUFFER OVERFLOW pool=%p sz=%zu allocs=%zu reuse=%zu free=%d", |
|
|
|
|
pool, pool->object_size, pool->allocations, pool->reuse_count, pool->free_count); |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "pool_free BUFFER OVERFLOW pool=%p name=%s sz=%zu allocs=%zu reuse=%zu free=%d", |
|
|
|
|
pool, pool->name ? pool->name : "?", pool->object_size, pool->allocations, pool->reuse_count, pool->free_count); |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, " obj=%p alloc=%s free=%s canary=0x%08x expected=0x%08x", |
|
|
|
|
obj, *loc ? *loc : "(null)", location, *canary, POOL_CANARY_VAL); |
|
|
|
|
if (pool->object_size) |
|
|
|
|
@ -39,8 +39,8 @@ static void pool_check_and_clear_tags(struct memory_pool* pool, void* obj, const
|
|
|
|
|
while (_halt) {} |
|
|
|
|
} |
|
|
|
|
if (*counter == 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "pool_free DOUBLE FREE pool=%p sz=%zu allocs=%zu reuse=%zu alloc=%s free=%s", |
|
|
|
|
pool, pool->object_size, pool->allocations, pool->reuse_count, |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "pool_free DOUBLE FREE pool=%p name=%s sz=%zu allocs=%zu reuse=%zu alloc=%s free=%s", |
|
|
|
|
pool, pool->name ? pool->name : "?", pool->object_size, pool->allocations, pool->reuse_count, |
|
|
|
|
*loc ? *loc : "(null)", location); |
|
|
|
|
volatile int _halt = 1; |
|
|
|
|
while (_halt) {} |
|
|
|
|
@ -55,7 +55,7 @@ size_t memory_pool_get_total_free_blocks(void) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Инициализировать пул памяти
|
|
|
|
|
struct memory_pool* memory_pool_init(size_t object_size) { |
|
|
|
|
struct memory_pool* memory_pool_init(size_t object_size, const char* name) { |
|
|
|
|
struct memory_pool* pool = u_calloc(1, sizeof(struct memory_pool)); |
|
|
|
|
if (!pool) { |
|
|
|
|
return NULL; |
|
|
|
|
@ -66,6 +66,7 @@ struct memory_pool* memory_pool_init(size_t object_size) {
|
|
|
|
|
pool->allocations = 0; |
|
|
|
|
pool->reuse_count = 0; |
|
|
|
|
pool->alloc_tag_counter = 1; |
|
|
|
|
pool->name = name; |
|
|
|
|
return pool; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|