Fix repairing of memusage trace files.
authorUlrich Drepper <drepper@redhat.com>
Thu, 29 Oct 2009 21:19:33 +0000 (14:19 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 29 Oct 2009 21:19:33 +0000 (14:19 -0700)
ChangeLog
malloc/memusagestat.c

index b673fd9..48dfde7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-10-29  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ #10717]
+       * malloc/memusagestat.c (main): Fix repairing of trace files.  We also
+       have to compute maxsize_total, we have to update the variables, and
+       the also_total handling must happen after the repair.
+
        [BZ #10742]
        * nscd/dbg_log.c (dbg_log): Print timestamp before the message text.
        Based on patch by Jeffrey Bastian <jbastian@redhat.com>.
index bf33175..4d57f2c 100644 (file)
@@ -191,13 +191,6 @@ main (int argc, char *argv[])
   maxsize_heap = headent[1].heap;
   maxsize_stack = headent[1].stack;
   maxsize_total = headent[0].stack;
-  if (also_total)
-    {
-      /* We use one scale and since we also draw the total amount of
-        memory used we have to adapt the maximum.  */
-      maxsize_heap = maxsize_total;
-      maxsize_stack = maxsize_total;
-    }
 
   if (maxsize_heap == 0 && maxsize_stack == 0)
     {
@@ -210,18 +203,31 @@ main (int argc, char *argv[])
        {
          if (read (fd, &next, sizeof (next)) == 0)
            break;
-         if (next.heap > headent[1].heap)
-           headent[1].heap = next.heap;
-         if (next.stack > headent[1].stack)
-           headent[1].stack = next.stack;
+         if (next.heap > maxsize_heap)
+           maxsize_heap = next.heap;
+         if (next.stack > maxsize_stack)
+           maxsize_stack = next.stack;
+         if (maxsize_heap + maxsize_stack > maxsize_total)
+           maxsize_total = maxsize_heap + maxsize_stack;
        }
 
+      headent[0].stack = maxsize_total;
+      headent[1].heap = maxsize_heap;
+      headent[1].stack = maxsize_stack;
       headent[1].time_low = next.time_low;
       headent[1].time_high = next.time_high;
 
       /* Write the computed values in the file.  */
-      lseek (fd, sizeof (struct entry), SEEK_SET);
-      write (fd, &headent[1], sizeof (struct entry));
+      lseek (fd, 0, SEEK_SET);
+      write (fd, headent, 2 * sizeof (struct entry));
+    }
+
+  if (also_total)
+    {
+      /* We use one scale and since we also draw the total amount of
+        memory used we have to adapt the maximum.  */
+      maxsize_heap = maxsize_total;
+      maxsize_stack = maxsize_total;
     }
 
   start_time = ((uint64_t) headent[0].time_high) << 32 | headent[0].time_low;