diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-14 12:56:22 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-14 12:56:22 +0100 |
commit | dabd2355f355abd7d1d58641f6cc496adb1482d1 (patch) | |
tree | 48f674f68b5ec2314d4dd7735af0db0af3408c49 /src/common/libkogata/slab_alloc.c | |
parent | 151edb44eea9bf25ec466133e9dbef87bd6b1372 (diff) | |
download | kogata-dabd2355f355abd7d1d58641f6cc496adb1482d1.tar.gz kogata-dabd2355f355abd7d1d58641f6cc496adb1482d1.zip |
Add mutexes everywhere ; spam debug log (sorry)
Diffstat (limited to 'src/common/libkogata/slab_alloc.c')
-rw-r--r-- | src/common/libkogata/slab_alloc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/common/libkogata/slab_alloc.c b/src/common/libkogata/slab_alloc.c index 837a965..daa3a50 100644 --- a/src/common/libkogata/slab_alloc.c +++ b/src/common/libkogata/slab_alloc.c @@ -235,6 +235,18 @@ void slab_free(mem_allocator_t* a, void* addr) { ASSERT((addr - r->region_addr) % a->types[i].obj_size == 0); object_t *o = (object_t*)addr; + + // check the object is not already on the free list (double-free error) + for (object_t *i = r->first_free_obj; i != 0; i = i->next) { + if (!((void*)i >= r->region_addr && (void*)i < r->region_addr + region_size)){ + dbg_printf("Invalid object 0x%p in cache 0x%p - %x\n", i, r->region_addr, region_size); + PANIC("Error"); + } + ASSERT(o != i); + } + + /*dbg_printf("Put back 0x%p in 0x%p\n", o, r->region_addr);*/ + o->next = r->first_free_obj; r->first_free_obj = o; r->n_free_objs++; |