the signed/unsigned change seems to have caused a logic bug on some
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index 8938837..4052ea9 100644 (file)
--- a/main.c
+++ b/main.c
@@ -57,6 +57,12 @@ static void report(int f)
        extern int remote_version;
        int send_stats;
 
+       if (do_stats) {
+               /* These come out from every process */
+               show_malloc_stats();
+               show_flist_stats();
+       }
+
        if (am_daemon) {
                log_exit(0, __FILE__, __LINE__);
                if (f == -1 || !am_sender) return;
@@ -120,7 +126,6 @@ static void report(int f)
                rprintf(FINFO,"total size is %.0f  speedup is %.2f\n",
                       (double)stats.total_size,
                       (1.0*stats.total_size)/(stats.total_written+stats.total_read));
-               show_malloc_stats();
        }
 
        fflush(stdout);
@@ -135,10 +140,17 @@ static void show_malloc_stats(void)
 {
 #ifdef HAVE_MALLINFO
        struct mallinfo mi;
+       extern int am_server;
+       extern int am_sender;
+       extern int am_daemon;
 
        mi = mallinfo();
 
-       rprintf(FINFO, RSYNC_NAME " heap statistics:\n");
+       rprintf(FINFO, RSYNC_NAME "[%d] (%s%s%s) heap statistics:\n",
+               getpid(),
+               am_server ? "server " : "",
+               am_daemon ? "daemon " : "",
+               am_sender ? "sender" : "receiver");
        rprintf(FINFO, "  arena:     %10d   (bytes from sbrk)\n", mi.arena);
        rprintf(FINFO, "  ordblks:   %10d   (chunks not in use)\n", mi.ordblks);
        rprintf(FINFO, "  smblks:    %10d\n", mi.smblks);
@@ -792,8 +804,10 @@ int main(int argc,char *argv[])
        extern int write_batch;  /*  dw */
        extern char *batch_ext;   /*  dw */
        int orig_argc;  /* dw */
+       char **orig_argv;
 
        orig_argc = argc;   /* dw */
+       orig_argv = argv;
 
        signal(SIGUSR1, sigusr1_handler);
        signal(SIGUSR2, sigusr2_handler);
@@ -833,7 +847,7 @@ int main(int argc,char *argv[])
 
        if (write_batch) { /* dw */
            create_batch_file_ext();
-           write_batch_argvs_file(orig_argc, argc, argv);
+           write_batch_argvs_file(orig_argc, orig_argv);
        }
 
        if (read_batch) { /* dw */