- alloc_size = sizeof(Allocated);
- if ((a = (Allocated *) malloc(alloc_size)) == NULL) {
- /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
- MallocFailHook((W_) alloc_size, "creating info for debugging allocator");
- stg_exit(EXIT_INTERNAL_ERROR);
+ if (allocs != NULL) {
+ alloc_size = sizeof(Allocated);
+ if ((a = (Allocated *) malloc(alloc_size)) == NULL) {
+ /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
+ MallocFailHook((W_) alloc_size,
+ "creating info for debugging allocator");
+ stg_exit(EXIT_INTERNAL_ERROR);
+ }
+ a->addr = addr;
+ a->len = len;
+ ACQUIRE_LOCK(&allocator_mutex);
+ a->next = allocs->next;
+ allocs->next = a;
+ RELEASE_LOCK(&allocator_mutex);
+ }
+ else {
+ /* This doesn't actually help as we haven't looked at the flags
+ * at the time that it matters (while running constructors) */
+ IF_DEBUG(sanity,
+ debugBelch("Ignoring allocation %p %zd as allocs is NULL\n",
+ addr, len);)