diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | malloc/memusagestat.c | 32 |
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; |