X-Git-Url: https://iam.tj/gitweb/gitweb.cgi?p=firmware_extractor.git;a=blobdiff_plain;f=heap_reap.c;fp=heap_reap.c;h=cbf24945015602998ff4a9cd456f6c28dd6e146d;hp=76f44f88842558e4b88a7393d3650d2e15364cd0;hb=3e904ec35fe16147c6846fc9efdf065403490310;hpb=743d4bfaf74fe7584368e262d15c256436d55624 diff --git a/heap_reap.c b/heap_reap.c index 76f44f8..cbf2494 100644 --- a/heap_reap.c +++ b/heap_reap.c @@ -41,21 +41,24 @@ heap_and_reap(void *ptr, size_t nmemb, size_t size) tmp->requested = nmemb * size; tmp->ptr = result; tmp->prev = memalloc; - tmp->next = NULL; - if (memalloc) + tmp->next = memalloc ? memalloc->next : NULL; + if (memalloc) { + if (memalloc->next) + memalloc->next->prev = tmp; memalloc->next = tmp; + } else memalloc = tmp; if (heap_debug) - fprintf(stderr, "heap req %08lx alloc %08lx @ %p\n", tmp->requested, tmp->allocated, tmp); + fprintf(stderr, "heap %p req %08lx alloc %08lx @ %p track %p next %p\n", memalloc, tmp->requested, tmp->allocated, tmp->ptr, tmp, memalloc->next); } } else { // free allocation struct mem_track *p = memalloc; while (p) { + if(heap_debug) + fprintf(stderr, "%sheap %p free %08lx @ %p track %p next %p\n", (p->ptr != ptr ? " " : ""), memalloc, p->requested, p->ptr, p, p->next); if (ptr == NULL-1 || p->ptr == ptr) { // free all or a specific allocation - if (heap_debug) - fprintf(stderr, "heap free %08lx @ %p\n", p->allocated, p); tmp = p->next; if (p->prev) p->prev->next = p->next;