Add several new record features
[ghc-hetmet.git] / rts / Sparks.c
index 68ad19d..ca60e13 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++;