Add Coercion.lhs
[ghc-hetmet.git] / rts / Sparks.c
index 615d832..c7a1c9f 100644 (file)
@@ -21,6 +21,7 @@
 # include "GranSimRts.h"
 # endif
 #include "Sparks.h"
+#include "Trace.h"
 
 #if defined(THREADED_RTS) || defined(PARALLEL_HASKELL)
 
@@ -128,13 +129,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++;
@@ -149,19 +152,18 @@ markSparkQueue (evac_fn evac)
        PAR_TICKY_MARK_SPARK_QUEUE_END(n);
        
 #if defined(PARALLEL_HASKELL)
-       IF_DEBUG(scheduler,
-                debugBelch("markSparkQueue: marked %d sparks and pruned %d sparks on [%x]",
-                           n, pruned_sparks, mytid));
+       debugTrace(DEBUG_sched, 
+                  "marked %d sparks and pruned %d sparks on [%x]",
+                  n, pruned_sparks, mytid);
 #else
-       IF_DEBUG(scheduler,
-              debugBelch("markSparkQueue: marked %d sparks and pruned %d sparks\n",
-                         n, pruned_sparks));
+       debugTrace(DEBUG_sched, 
+                  "marked %d sparks and pruned %d sparks",
+                  n, pruned_sparks);
 #endif
        
-       IF_DEBUG(scheduler,
-                debugBelch("markSparkQueue:   new spark queue len=%d; (hd=%p; tl=%p)\n",
-                           sparkPoolSize(pool), pool->hd, pool->tl));
-       
+       debugTrace(DEBUG_sched,
+                  "new spark queue len=%d; (hd=%p; tl=%p)\n",
+                  sparkPoolSize(pool), pool->hd, pool->tl);
     }
 }
 
@@ -825,8 +827,9 @@ markSparkQueue(void)
       // ToDo?: statistics gathering here (also for GUM!)
       sp->node = (StgClosure *)MarkRoot(sp->node);
     }
+
   IF_DEBUG(gc,
-          debugBelch("@@ markSparkQueue: spark statistics at start of GC:");
+          debugBelch("markSparkQueue: spark statistics at start of GC:");
           print_sparkq_stats());
 }