From: Simon Marlow Date: Fri, 18 Mar 2011 14:21:22 +0000 (+0000) Subject: pruneSparkQueue: handle CAFs X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=17bfe098a9043f38d46c4fed1429d6bc20de299b pruneSparkQueue: handle CAFs --- diff --git a/rts/Sparks.c b/rts/Sparks.c index ad08f3b..a826190 100644 --- a/rts/Sparks.c +++ b/rts/Sparks.c @@ -219,19 +219,34 @@ pruneSparkQueue (Capability *cap) pruned_sparks++; // discard spark cap->sparks_fizzled++; } - } else if (HEAP_ALLOCED(spark) && - (Bdescr((P_)spark)->flags & BF_EVACUATED)) { - if (closure_SHOULD_SPARK(spark)) { - elements[botInd] = spark; // keep entry (new address) - botInd++; - n++; + } else if (HEAP_ALLOCED(spark)) { + if ((Bdescr((P_)spark)->flags & BF_EVACUATED)) { + if (closure_SHOULD_SPARK(spark)) { + elements[botInd] = spark; // keep entry (new address) + botInd++; + n++; + } else { + pruned_sparks++; // discard spark + cap->sparks_fizzled++; + } } else { pruned_sparks++; // discard spark - cap->sparks_fizzled++; + cap->sparks_gcd++; } } else { - pruned_sparks++; // discard spark - cap->sparks_gcd++; + if (INFO_PTR_TO_STRUCT(info)->type == THUNK_STATIC) { + if (*THUNK_STATIC_LINK(spark) != NULL) { + elements[botInd] = spark; // keep entry (new address) + botInd++; + n++; + } else { + pruned_sparks++; // discard spark + cap->sparks_gcd++; + } + } else { + pruned_sparks++; // discard spark + cap->sparks_fizzled++; + } } }