aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-10-29 14:19:33 -0700
committerUlrich Drepper <drepper@redhat.com>2009-10-29 14:19:33 -0700
commit67854c131c2ba8c013debf466b20cb13fffa120b (patch)
treec551631b7450281abc7dce798582de392451aa2e
parente0f471a1187cdfcb029c80819da52b4c12e352f5 (diff)
downloadglibc-67854c131c2ba8c013debf466b20cb13fffa120b.tar
glibc-67854c131c2ba8c013debf466b20cb13fffa120b.tar.gz
glibc-67854c131c2ba8c013debf466b20cb13fffa120b.tar.bz2
glibc-67854c131c2ba8c013debf466b20cb13fffa120b.zip
Fix repairing of memusage trace files.
-rw-r--r--ChangeLog5
-rw-r--r--malloc/memusagestat.c32
2 files changed, 24 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index b673fd9580..48dfde724d 100644
--- 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>.
diff --git a/malloc/memusagestat.c b/malloc/memusagestat.c
index bf33175415..4d57f2cc23 100644
--- a/malloc/memusagestat.c
+++ b/malloc/memusagestat.c
@@ -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;