summaryrefslogtreecommitdiff
path: root/rts/sm/Evac.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-10-08 15:14:42 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-10-08 15:14:42 +0000
commit754e039a8a15d5774fe73872ff9ac593b46370e0 (patch)
treebcfba31061c3c70ca497722683eebc57688e1598 /rts/sm/Evac.c
parent4a2013c2e05eb07380938569a196e08eba7c5226 (diff)
downloadhaskell-754e039a8a15d5774fe73872ff9ac593b46370e0.tar.gz
Mark/compact: use a dynamically-sized mark stack, and don't do linear scan
This improves the performance of the mark/compact and mark/region collectors, and paves the way for doing mark/region with smaller region sizes, in the style of Immix.
Diffstat (limited to 'rts/sm/Evac.c')
-rw-r--r--rts/sm/Evac.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c
index 5836210b34..379fbbaffd 100644
--- a/rts/sm/Evac.c
+++ b/rts/sm/Evac.c
@@ -20,6 +20,7 @@
#include "GCThread.h"
#include "GCUtils.h"
#include "Compact.h"
+#include "MarkStack.h"
#include "Prelude.h"
#include "Trace.h"
#include "LdvProfile.h"
@@ -499,11 +500,6 @@ loop:
*/
if (!is_marked((P_)q,bd)) {
mark((P_)q,bd);
- if (mark_stack_full()) {
- debugTrace(DEBUG_gc,"mark stack overflowed");
- mark_stack_overflowed = rtsTrue;
- reset_mark_stack();
- }
push_mark_stack((P_)q);
}
return;