Fix whitespace in TcTyDecls
[ghc-hetmet.git] / rts / Sparks.c
index 68ad19d..0ff4ee4 100644 (file)
@@ -8,9 +8,9 @@
 
 #include "PosixSource.h"
 #include "Rts.h"
+#include "Storage.h"
 #include "Schedule.h"
 #include "SchedAPI.h"
-#include "Storage.h"
 #include "RtsFlags.h"
 #include "RtsUtils.h"
 #include "ParTicky.h"
@@ -63,6 +63,11 @@ initSparkPools( void )
 #endif
 }
 
+void
+freeSparkPool(StgSparkPool *pool) {
+    stgFree(pool->base);
+}
+
 /* -----------------------------------------------------------------------------
  * 
  * findSpark: find a spark on the current Capability that we can fork
@@ -129,13 +134,15 @@ markSparkQueue (evac_fn evac)
        sparkp = pool->hd;
        to_sparkp = pool->hd;
        while (sparkp != pool->tl) {
-           ASSERT(to_sparkp<=sparkp);
            ASSERT(*sparkp!=NULL);
            ASSERT(LOOKS_LIKE_CLOSURE_PTR(((StgClosure *)*sparkp)));
            // ToDo?: statistics gathering here (also for GUM!)
            if (closure_SHOULD_SPARK(*sparkp)) {
                evac(sparkp);
                *to_sparkp++ = *sparkp;
+               if (to_sparkp == pool->lim) {
+                   to_sparkp = pool->base;
+               }
                n++;
            } else {
                pruned_sparks++;
@@ -193,6 +200,12 @@ newSpark (StgRegTable *reg, StgClosure *p)
 {
     StgSparkPool *pool = &(reg->rSparks);
 
+    /* I am not sure whether this is the right thing to do.
+     * Maybe it is better to exploit the tag information
+     * instead of throwing it away?
+     */
+    p = UNTAG_CLOSURE(p);
+
     ASSERT_SPARK_POOL_INVARIANTS(pool);
 
     if (closure_SHOULD_SPARK(p)) {