]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Minor tweaks to trace_run and trace2wl
authorDJ Delorie <dj@delorie.com>
Wed, 20 Jul 2016 02:22:46 +0000 (22:22 -0400)
committerDJ Delorie <dj@delorie.com>
Wed, 20 Jul 2016 02:22:46 +0000 (22:22 -0400)
trace_run - fix realloc returning NULL behavior

trace2wl - hard stop on multi-level inversion, print number
of fixed inversions.

malloc/trace2wl.cc
malloc/trace_run.c

index 5cab4755d937b2fb0bf6ca787c8ad25ed829b327..e1e8bb684b2a2f2fdb29dc301523465c72414919 100644 (file)
@@ -182,6 +182,7 @@ PerThread *master_thread = NULL;
 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)
@@ -231,8 +232,14 @@ 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;
        }
@@ -468,6 +475,8 @@ main(int argc, char **argv)
 
   if (pending_inversions)
     printf("%d pending inversions remain\n", pending_inversions);
+  if (fixed_inversions)
+    printf("%d inversions fixed\n", fixed_inversions);
 
   return 0;
 }
index 3b74ce3fb9cd3e862c31a15dad5fde509db07423..91331e49469eb37d42dae5d723f539484dd5eb84 100644 (file)
@@ -413,19 +413,13 @@ thread_common (void *my_data_v)
            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