diff options
author | Simon Marlow <marlowsd@gmail.com> | 2008-11-19 14:30:43 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2008-11-19 14:30:43 +0000 |
commit | 65914a2cb71caf01655b16a75b283871e2482041 (patch) | |
tree | 518446977c6d32315006c21a4fa6950930f59b86 /rts | |
parent | 58852522d1ba4fb647bf2e0a67745a808a7da0c6 (diff) | |
download | haskell-65914a2cb71caf01655b16a75b283871e2482041.tar.gz |
Remove incorrect assertions in steal()
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Sparks.c | 8 | ||||
-rw-r--r-- | rts/Sparks.h | 7 |
2 files changed, 12 insertions, 3 deletions
diff --git a/rts/Sparks.c b/rts/Sparks.c index cb3d8d98eb..571529afbb 100644 --- a/rts/Sparks.c +++ b/rts/Sparks.c @@ -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; } diff --git a/rts/Sparks.h b/rts/Sparks.h index f24ccca4ff..fd62c1288d 100644 --- a/rts/Sparks.h +++ b/rts/Sparks.h @@ -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); \ |