int last_tid = -1;
PerThread *thread = NULL;
int pending_inversions = 0;
+int fixed_inversions = 0;
static void
process_one_trace_record (__malloc_trace_buffer_s *r)
if (pa2 && pa2->valid)
{
if (pa2->inverted)
- printf ("%d: pointer %p alloc'd again? %d:%s\n", i, pa2->ptr, pa2->reason_idx, pa2->reason);
+ {
+ printf ("%d: pointer %p alloc'd again? (possible multi-level inversion) size %d %d:%s\n",
+ i, pa2->ptr, (int)r->size, pa2->reason_idx, pa2->reason);
+ exit (1);
+ }
+ printf("inversion for type %d\n", r->type);
pa2->inverted = r;
+ fixed_inversions ++;
pending_inversions ++;
return;
}
if (pending_inversions)
printf("%d pending inversions remain\n", pending_inversions);
+ if (fixed_inversions)
+ printf("%d inversions fixed\n", fixed_inversions);
return 0;
}
myabort();
if (p2 > n_ptrs)
myabort();
+ /* we can't force realloc to return NULL (fail), so just skip it. */
+ if (p2 == 0)
+ break;
+
if (ptrs[p1])
atomic_rss (-sizes[p1]);
free_wipe(p1);
- /* we can't force realloc to return NULL (fail), so just skip it. */
- if (p2 == 0)
- {
- if (p1)
- {
- free ((void *)ptrs[p1]);
- ptrs[p1] = 0;
- }
- break;
- }
stime = rdtsc_s();
Q1;
#ifdef MDEBUG