releaseCapabilityAndQueueWorker: task->stopped should be false (#4850)
authorSimon Marlow <marlowsd@gmail.com>
Tue, 21 Dec 2010 11:49:11 +0000 (11:49 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 21 Dec 2010 11:49:11 +0000 (11:49 +0000)
rts/Capability.c

index 8234359..345bd39 100644 (file)
@@ -456,12 +456,16 @@ releaseCapabilityAndQueueWorker (Capability* cap USED_IF_THREADS)
 
     task = cap->running_task;
 
+    // If the Task is stopped, we shouldn't be yielding, we should
+    // be just exiting.
+    ASSERT(!task->stopped);
+
     // If the current task is a worker, save it on the spare_workers
     // list of this Capability.  A worker can mark itself as stopped,
     // in which case it is not replaced on the spare_worker queue.
     // This happens when the system is shutting down (see
     // Schedule.c:workerStart()).
-    if (!isBoundTask(task) && !task->stopped)
+    if (!isBoundTask(task))
     {
         if (cap->n_spare_workers < MAX_SPARE_WORKERS)
         {