fix track alloc code
This commit is contained in:
parent
1c1bc2f1cd
commit
a98dec035f
@ -2,7 +2,8 @@
|
|||||||
#include "memory_region.h"
|
#include "memory_region.h"
|
||||||
|
|
||||||
#if RUSTRT_TRACK_ALLOCATIONS >= 1
|
#if RUSTRT_TRACK_ALLOCATIONS >= 1
|
||||||
# define PTR_SIZE (sizeof(void*))
|
// For some platforms, 16 byte alignment is required.
|
||||||
|
# define PTR_SIZE 16
|
||||||
# define ALIGN_PTR(x) (((x)+PTR_SIZE-1)/PTR_SIZE*PTR_SIZE)
|
# define ALIGN_PTR(x) (((x)+PTR_SIZE-1)/PTR_SIZE*PTR_SIZE)
|
||||||
# define HEADER_SIZE ALIGN_PTR(sizeof(alloc_header))
|
# define HEADER_SIZE ALIGN_PTR(sizeof(alloc_header))
|
||||||
# define MAGIC 0xbadc0ffe
|
# define MAGIC 0xbadc0ffe
|
||||||
@ -65,11 +66,15 @@ memory_region::realloc(void *mem, size_t orig_size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
alloc_header *alloc = get_header(mem);
|
alloc_header *alloc = get_header(mem);
|
||||||
|
# if RUSTRT_TRACK_ALLOCATIONS >= 1
|
||||||
|
assert(alloc->magic == MAGIC);
|
||||||
|
# endif
|
||||||
|
|
||||||
size_t size = orig_size + HEADER_SIZE;
|
size_t size = orig_size + HEADER_SIZE;
|
||||||
alloc_header *newMem = (alloc_header *)_srv->realloc(alloc, size);
|
alloc_header *newMem = (alloc_header *)_srv->realloc(alloc, size);
|
||||||
|
|
||||||
# if RUSTRT_TRACK_ALLOCATIONS >= 1
|
# if RUSTRT_TRACK_ALLOCATIONS >= 1
|
||||||
assert(alloc->magic == MAGIC);
|
assert(newMem->magic == MAGIC);
|
||||||
newMem->size = orig_size;
|
newMem->size = orig_size;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -141,7 +146,7 @@ memory_region::~memory_region() {
|
|||||||
alloc_header *header = (alloc_header*)_allocation_list[i];
|
alloc_header *header = (alloc_header*)_allocation_list[i];
|
||||||
printf("allocation (%s) 0x%" PRIxPTR " was not freed\n",
|
printf("allocation (%s) 0x%" PRIxPTR " was not freed\n",
|
||||||
header->tag,
|
header->tag,
|
||||||
(uintptr_t) &header->data);
|
(uintptr_t) get_data(header));
|
||||||
++leak_count;
|
++leak_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,7 +172,7 @@ memory_region::release_alloc(void *mem) {
|
|||||||
if (_synchronized) { _lock.lock(); }
|
if (_synchronized) { _lock.lock(); }
|
||||||
if (_allocation_list[alloc->index] != alloc) {
|
if (_allocation_list[alloc->index] != alloc) {
|
||||||
printf("free: ptr 0x%" PRIxPTR " (%s) is not in allocation_list\n",
|
printf("free: ptr 0x%" PRIxPTR " (%s) is not in allocation_list\n",
|
||||||
(uintptr_t) &alloc->data, alloc->tag);
|
(uintptr_t) get_data(alloc), alloc->tag);
|
||||||
_srv->fatal("not in allocation_list", __FILE__, __LINE__, "");
|
_srv->fatal("not in allocation_list", __FILE__, __LINE__, "");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -222,6 +227,5 @@ memory_region::maybe_poison(void *mem) {
|
|||||||
// indent-tabs-mode: nil
|
// indent-tabs-mode: nil
|
||||||
// c-basic-offset: 4
|
// c-basic-offset: 4
|
||||||
// buffer-file-coding-system: utf-8-unix
|
// buffer-file-coding-system: utf-8-unix
|
||||||
// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
|
|
||||||
// End:
|
// End:
|
||||||
//
|
//
|
||||||
|
@ -80,7 +80,6 @@ inline void *operator new(size_t size, memory_region *region,
|
|||||||
// indent-tabs-mode: nil
|
// indent-tabs-mode: nil
|
||||||
// c-basic-offset: 4
|
// c-basic-offset: 4
|
||||||
// buffer-file-coding-system: utf-8-unix
|
// buffer-file-coding-system: utf-8-unix
|
||||||
// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
|
|
||||||
// End:
|
// End:
|
||||||
//
|
//
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user