#include #include #include "cache.h" /*--------------------------------------------------------- */ lub_heap_status_t lub_heap_realloc(lub_heap_t *this, char **ptr, size_t requested_size, lub_heap_align_t alignment) { lub_heap_status_t status = LUB_HEAP_FAILED; size_t size = requested_size; /* opportunity for leak detection to do it's stuff */ lub_heap_pre_realloc(this,ptr,&size); if(this->cache && (LUB_HEAP_ALIGN_NATIVE == alignment)) { /* try and get the memory from the cache */ status = lub_heap_cache_realloc(this,ptr,size); } else { /* get the memory directly from the dynamic heap */ status = lub_heap_raw_realloc(this,ptr,size,alignment); } /* opportunity for leak detection to do it's stuff */ lub_heap_post_realloc(this,ptr); if(LUB_HEAP_OK == status) { /* update the high tide markers */ if( (this->stats.alloc_bytes + this->stats.alloc_overhead) > (this->stats.alloc_hightide_bytes + this->stats.alloc_hightide_overhead)) { this->stats.alloc_hightide_blocks = this->stats.alloc_blocks; this->stats.alloc_hightide_bytes = this->stats.alloc_bytes; this->stats.alloc_hightide_overhead = this->stats.alloc_overhead; this->stats.free_hightide_blocks = this->stats.free_blocks; this->stats.free_hightide_bytes = this->stats.free_bytes; this->stats.free_hightide_overhead = this->stats.free_overhead; } } else { /* this call enables a debugger to catch failures */ lub_heap_stop_here(status,*ptr,requested_size); } if((0 == requested_size) && (NULL == *ptr) && (LUB_HEAP_OK == status)) { /* make sure that client doesn't use this (non-existant memory) */ *ptr = LUB_HEAP_ZERO_ALLOC; } return status; } /*--------------------------------------------------------- */