- printf("wrote %.0f bytes read %.0f bytes %.2f bytes/sec\n",
- (double)stats.total_written,
- (double)stats.total_read,
- (stats.total_written+stats.total_read)/(0.5 + (t-starttime)));
- printf("total size is %.0f speedup is %.2f\n",
- (double)stats.total_size,
- (1.0*stats.total_size)/(stats.total_written+stats.total_read));
+ if (verbose || do_stats) {
+ rprintf(FINFO,"wrote %.0f bytes read %.0f bytes %.2f bytes/sec\n",
+ (double)stats.total_written,
+ (double)stats.total_read,
+ (stats.total_written+stats.total_read)/(0.5 + (t-starttime)));
+ 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));
+ }
+
+ fflush(stdout);
+ fflush(stderr);
+}
+
+
+/**
+ * If our C library can get malloc statistics, then show them to FINFO
+ **/
+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 "[%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);
+ rprintf(FINFO, " hblks: %10d (chunks from mmap)\n", mi.hblks);
+ rprintf(FINFO, " hblkhd: %10d (bytes from mmap)\n", mi.hblkhd);
+ rprintf(FINFO, " usmblks: %10d\n", mi.usmblks);
+ rprintf(FINFO, " fsmblks: %10d\n", mi.fsmblks);
+ rprintf(FINFO, " uordblks: %10d (bytes used)\n", mi.uordblks);
+ rprintf(FINFO, " fordblks: %10d (bytes free)\n", mi.fordblks);
+ rprintf(FINFO, " keepcost: %10d (bytes in releasable chunk)\n", mi.keepcost);
+#endif /* HAVE_MALLINFO */