X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FSparks.c;h=857921260b811e942dfe67c24f9cae83e502c431;hb=34c8d0312071f7d0f4d221a997d3408c653ef9e5;hp=3911ae9e0be8c5c633bc4128fd882dc7771eb612;hpb=3ad5c4bbe8b3f40a2a105722c7c1b0abb0c99c66;p=ghc-hetmet.git diff --git a/rts/Sparks.c b/rts/Sparks.c index 3911ae9..8579212 100644 --- a/rts/Sparks.c +++ b/rts/Sparks.c @@ -71,9 +71,10 @@ newSpark (StgRegTable *reg, StgClosure *p) if (closure_SHOULD_SPARK(p)) { pushWSDeque(pool,p); - } - - cap->sparks_created++; + cap->sparks_created++; + } else { + cap->sparks_dud++; + } return 1; } @@ -112,7 +113,7 @@ tryStealSpark (Capability *cap) * -------------------------------------------------------------------------- */ void -pruneSparkQueue (evac_fn evac, void *user, Capability *cap) +pruneSparkQueue (Capability *cap) { SparkPool *pool; StgClosurePtr spark, tmp, *elements; @@ -206,19 +207,23 @@ pruneSparkQueue (evac_fn evac, void *user, Capability *cap) n++; } else { pruned_sparks++; // discard spark - cap->sparks_pruned++; + cap->sparks_fizzled++; } - } else { - if (!(closure_flags[INFO_PTR_TO_STRUCT(info)->type] & _NS)) { + } else if (HEAP_ALLOCED(spark) && + (Bdescr((P_)spark)->flags & BF_EVACUATED)) { + if (closure_SHOULD_SPARK(spark)) { elements[botInd] = spark; // keep entry (new address) - evac (user, &elements[botInd]); botInd++; n++; } else { pruned_sparks++; // discard spark - cap->sparks_pruned++; + cap->sparks_fizzled++; } + } else { + pruned_sparks++; // discard spark + cap->sparks_gcd++; } + currInd++; // in the loop, we may reach the bounds, and instantly wrap around