Removed sort_hash_array(). Changed VG_(HT_to_sorted_array)() to
VG_(HT_to_array)(). Leak checker now sorts the given array itself, using
VG_(ssort)().
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1872 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mac_leakcheck.c b/memcheck/mac_leakcheck.c
index b7af264..a9b5ad2 100644
--- a/memcheck/mac_leakcheck.c
+++ b/memcheck/mac_leakcheck.c
@@ -361,6 +361,13 @@
Int MAC_(bytes_reachable) = 0;
Int MAC_(bytes_suppressed) = 0;
+static Int lc_compar(void* n1, void* n2)
+{
+ MAC_Chunk* mc1 = *(MAC_Chunk**)n1;
+ MAC_Chunk* mc2 = *(MAC_Chunk**)n2;
+ return (mc1->data < mc2->data ? -1 : 1);
+}
+
/* Top level entry point to leak detector. Call here, passing in
suitable address-validating functions (see comment at top of
vg_scan_all_valid_memory above). All this is to avoid duplication
@@ -387,9 +394,17 @@
LossRecord* errlist;
LossRecord* p;
- /* VG_(HashTable_to_array) allocates storage for shadows */
- lc_shadows = (MAC_Chunk**)VG_(HT_to_sorted_array)( MAC_(malloc_list),
- &lc_n_shadows );
+ /* VG_(HT_to_array) allocates storage for shadows */
+ lc_shadows = (MAC_Chunk**)VG_(HT_to_array)( MAC_(malloc_list),
+ &lc_n_shadows );
+
+ /* Sort the array. */
+ VG_(ssort)((void*)lc_shadows, lc_n_shadows, sizeof(VgHashNode*), lc_compar);
+
+ /* Sanity check; assert that the blocks are now in order */
+ for (i = 0; i < lc_n_shadows-1; i++) {
+ sk_assert( lc_shadows[i]->data <= lc_shadows[i+1]->data);
+ }
/* Sanity check -- make sure they don't overlap */
for (i = 0; i < lc_n_shadows-1; i++) {