X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FTask.c;h=89db782800522bd8412e64d539c5d89d8c3cbeaf;hb=bbe90cbe14b94899efe0ce24e0c5fdbdb8d40ada;hp=bc140c1bcb70b467d50c1ecb3dff099776628eb0;hpb=9e780871543ab57a21de4a8ee588940d6479de11;p=ghc-hetmet.git diff --git a/ghc/rts/Task.c b/ghc/rts/Task.c index bc140c1..89db782 100644 --- a/ghc/rts/Task.c +++ b/ghc/rts/Task.c @@ -175,10 +175,21 @@ void discardTask (Task *task) { ASSERT_LOCK_HELD(&sched_mutex); - task->stopped = rtsTrue; - task->cap = NULL; - task->next = task_free_list; - task_free_list = task; + if (!task->stopped) { + IF_DEBUG(scheduler,sched_belch("discarding task %p", +#ifdef THREADED_RTS + (void *)task->id +#else + (void *)task +#endif + )); + task->cap = NULL; + task->tso = NULL; + task->stopped = rtsTrue; + tasksRunning--; + task->next = task_free_list; + task_free_list = task; + } } void