X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FSparks.c;h=a826190941ce7cd5c033af3d3ed084ff33e618c9;hp=ad08f3b5773162ea4eb9a86ad3833ca713498cbf;hb=HEAD;hpb=9ef55740aeffbc39b0cb65007d278cb3fd4be8f7 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++; + } } }