diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-10-08 15:14:42 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-10-08 15:14:42 +0000 |
commit | 754e039a8a15d5774fe73872ff9ac593b46370e0 (patch) | |
tree | bcfba31061c3c70ca497722683eebc57688e1598 /rts/sm/Evac.c | |
parent | 4a2013c2e05eb07380938569a196e08eba7c5226 (diff) | |
download | haskell-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.c | 6 |
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; |