pruneSparkQueue(): fix bug when top>bottom
authorSimon Marlow <marlowsd@gmail.com>
Thu, 6 Nov 2008 15:56:48 +0000 (15:56 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 6 Nov 2008 15:56:48 +0000 (15:56 +0000)
rts/Sparks.c

index e7273f3..cb3d8d9 100644 (file)
@@ -389,6 +389,12 @@ pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
     
     pool = cap->sparks;
     
+    // it is possible that top > bottom, indicating an empty pool.  We
+    // fix that here; this is only necessary because the loop below
+    // assumes it.
+    if (pool->top > pool->bottom)
+        pool->top = pool->bottom;
+
     // Take this opportunity to reset top/bottom modulo the size of
     // the array, to avoid overflow.  This is only possible because no
     // stealing is happening during GC.