Changed behaviour of VALGRIND_COUNT_LEAKS slightly.  Previously, the numbers it
returned (bytes leaked, dubious, etc) were incremented for every leak check
performed.  So if you called VALGRIND_DO_LEAK_CHECK twice in a row, the totals
would be updated twice by the same amount.  This was a bit silly.  So now
COUNT_LEAKS just returns the numbers of bytes leaked found from the previous
leak check.  I even updated the docs, and changed the regression test so old
version fail but the new version passes (by doing two DO_LEAK_CHECKS in a row).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1778 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mac_leakcheck.c b/memcheck/mac_leakcheck.c
index 9ad2360..581d649 100644
--- a/memcheck/mac_leakcheck.c
+++ b/memcheck/mac_leakcheck.c
@@ -356,10 +356,10 @@
    VG_(pp_ExeContext)(l->allocated_at);
 }
 
-Int MAC_(total_bytes_leaked)     = 0;
-Int MAC_(total_bytes_dubious)    = 0;
-Int MAC_(total_bytes_reachable)  = 0;
-Int MAC_(total_bytes_suppressed) = 0;
+Int MAC_(bytes_leaked)     = 0;
+Int MAC_(bytes_dubious)    = 0;
+Int MAC_(bytes_reachable)  = 0;
+Int MAC_(bytes_suppressed) = 0;
 
 /* Top level entry point to leak detector.  Call here, passing in
    suitable address-validating functions (see comment at top of
@@ -376,10 +376,10 @@
 )
 {
    Int    i;
-   Int    blocks_leaked, bytes_leaked;
-   Int    blocks_dubious, bytes_dubious;
-   Int    blocks_reachable, bytes_reachable;
-   Int    blocks_suppressed, bytes_suppressed;
+   Int    blocks_leaked;
+   Int    blocks_dubious;
+   Int    blocks_reachable;
+   Int    blocks_suppressed;
    Int    n_lossrecords;
    UInt   bytes_notified;
    Bool   is_suppressed;
@@ -457,10 +457,10 @@
    }
 
    /* Print out the commoned-up blocks and collect summary stats. */
-   blocks_leaked     = bytes_leaked     = 0;
-   blocks_dubious    = bytes_dubious    = 0;
-   blocks_reachable  = bytes_reachable  = 0;
-   blocks_suppressed = bytes_suppressed = 0;
+   blocks_leaked     = MAC_(bytes_leaked)     = 0;
+   blocks_dubious    = MAC_(bytes_dubious)    = 0;
+   blocks_reachable  = MAC_(bytes_reachable)  = 0;
+   blocks_suppressed = MAC_(bytes_suppressed) = 0;
 
    for (i = 0; i < n_lossrecords; i++) {
       Bool        print_record;
@@ -488,20 +488,20 @@
                              /*allow_GDB_attach*/False, /*count_error*/False );
 
       if (is_suppressed) {
-         blocks_suppressed += p_min->num_blocks;
-         bytes_suppressed  += p_min->total_bytes;
+         blocks_suppressed      += p_min->num_blocks;
+         MAC_(bytes_suppressed) += p_min->total_bytes;
 
-      } else if (Unreached == p_min->loss_mode) {
-         blocks_leaked     += p_min->num_blocks;
-         bytes_leaked      += p_min->total_bytes;
+      } else if (Unreached  == p_min->loss_mode) {
+         blocks_leaked      += p_min->num_blocks;
+         MAC_(bytes_leaked) += p_min->total_bytes;
 
-      } else if (Interior  == p_min->loss_mode) {
-         blocks_dubious    += p_min->num_blocks;
-         bytes_dubious     += p_min->total_bytes;
+      } else if (Interior    == p_min->loss_mode) {
+         blocks_dubious      += p_min->num_blocks;
+         MAC_(bytes_dubious) += p_min->total_bytes;
 
-      } else if (Proper    == p_min->loss_mode) {
-         blocks_reachable  += p_min->num_blocks;
-         bytes_reachable   += p_min->total_bytes;
+      } else if (Proper        == p_min->loss_mode) {
+         blocks_reachable      += p_min->num_blocks;
+         MAC_(bytes_reachable) += p_min->total_bytes;
 
       } else {
          VG_(skin_panic)("generic_detect_memory_leaks: unknown loss mode");
@@ -512,13 +512,13 @@
    VG_(message)(Vg_UserMsg, "");
    VG_(message)(Vg_UserMsg, "LEAK SUMMARY:");
    VG_(message)(Vg_UserMsg, "   definitely lost: %d bytes in %d blocks.", 
-                            bytes_leaked, blocks_leaked );
+                            MAC_(bytes_leaked), blocks_leaked );
    VG_(message)(Vg_UserMsg, "   possibly lost:   %d bytes in %d blocks.", 
-                            bytes_dubious, blocks_dubious );
+                            MAC_(bytes_dubious), blocks_dubious );
    VG_(message)(Vg_UserMsg, "   still reachable: %d bytes in %d blocks.", 
-                            bytes_reachable, blocks_reachable );
+                            MAC_(bytes_reachable), blocks_reachable );
    VG_(message)(Vg_UserMsg, "        suppressed: %d bytes in %d blocks.", 
-                            bytes_suppressed, blocks_suppressed );
+                            MAC_(bytes_suppressed), blocks_suppressed );
    if (!MAC_(clo_show_reachable)) {
       VG_(message)(Vg_UserMsg, 
         "Reachable blocks (those to which a pointer was found) are not shown.");
@@ -527,11 +527,6 @@
    }
    VG_(message)(Vg_UserMsg, "");
 
-   MAC_(total_bytes_leaked)     += bytes_leaked;
-   MAC_(total_bytes_dubious)    += bytes_dubious;
-   MAC_(total_bytes_reachable)  += bytes_reachable;
-   MAC_(total_bytes_suppressed) += bytes_suppressed;
-
    VG_(free) ( lc_shadows );
    VG_(free) ( lc_reachedness );
 }