summaryrefslogtreecommitdiff
path: root/rts/sm/Scav.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/sm/Scav.c')
-rw-r--r--rts/sm/Scav.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c
index 8bc702900b..36592af887 100644
--- a/rts/sm/Scav.c
+++ b/rts/sm/Scav.c
@@ -58,6 +58,7 @@
#include "Sanity.h"
#include "Capability.h"
#include "LdvProfile.h"
+#include "HeapUtils.h"
#include "Hash.h"
#include "sm/MarkWeak.h"
@@ -77,6 +78,11 @@ static void scavenge_large_bitmap (StgPtr p,
# define scavenge_capability_mut_lists(cap) scavenge_capability_mut_Lists1(cap)
#endif
+static void do_evacuate(StgClosure **p, void *user STG_UNUSED)
+{
+ evacuate(p);
+}
+
/* -----------------------------------------------------------------------------
Scavenge a TSO.
-------------------------------------------------------------------------- */
@@ -1777,22 +1783,7 @@ scavenge_static(void)
static void
scavenge_large_bitmap( StgPtr p, StgLargeBitmap *large_bitmap, StgWord size )
{
- uint32_t i, j, b;
- StgWord bitmap;
-
- b = 0;
-
- for (i = 0; i < size; b++) {
- bitmap = large_bitmap->bitmap[b];
- j = stg_min(size-i, BITS_IN(W_));
- i += j;
- for (; j > 0; j--, p++) {
- if ((bitmap & 1) == 0) {
- evacuate((StgClosure **)p);
- }
- bitmap = bitmap >> 1;
- }
- }
+ walk_large_bitmap(do_evacuate, (StgClosure **) p, large_bitmap, size, NULL);
}