Remove incorrect assertions in steal()
authorSimon Marlow <marlowsd@gmail.com>
Wed, 19 Nov 2008 14:30:43 +0000 (14:30 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 19 Nov 2008 14:30:43 +0000 (14:30 +0000)
rts/Sparks.c
rts/Sparks.h

index cb3d8d9..571529a 100644 (file)
@@ -202,10 +202,12 @@ steal(SparkPool *deque)
   StgClosurePtr stolen;
   StgWord b,t; 
 
-  ASSERT_SPARK_POOL_INVARIANTS(deque); 
+// Can't do this on someone else's spark pool:
+// ASSERT_SPARK_POOL_INVARIANTS(deque); 
 
   b = deque->bottom;
   t = deque->top;
+
   if (b - t <= 0 ) { 
     return NULL; /* already looks empty, abort */
   }
@@ -222,7 +224,9 @@ steal(SparkPool *deque)
       return NULL;
   }  /* else: OK, top has been incremented by the cas call */
 
-  ASSERT_SPARK_POOL_INVARIANTS(deque); 
+// Can't do this on someone else's spark pool:
+// ASSERT_SPARK_POOL_INVARIANTS(deque); 
+
   /* return stolen element */
   return stolen;
 }
index f24ccca..fd62c12 100644 (file)
@@ -52,7 +52,12 @@ typedef struct  SparkPool_ {
 
 
 /* INVARIANTS, in this order: reasonable size,
-   topBound consistent, space pointer, space accessible to us */
+   topBound consistent, space pointer, space accessible to us.
+   
+   NB. This is safe to use only (a) on a spark pool owned by the
+   current thread, or (b) when there's only one thread running, or no
+   stealing going on (e.g. during GC).
+*/
 #define ASSERT_SPARK_POOL_INVARIANTS(p)         \
   ASSERT((p)->size > 0);                        \
   ASSERT((p)->topBound <= (p)->top);            \