summaryrefslogtreecommitdiff
path: root/rts/Task.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/Task.c')
-rw-r--r--rts/Task.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/rts/Task.c b/rts/Task.c
index 2921e9e181..e2f363b321 100644
--- a/rts/Task.c
+++ b/rts/Task.c
@@ -280,11 +280,12 @@ boundTaskExiting (Task *task)
void
discardTasksExcept (Task *keep)
{
- Task *task;
+ Task *task, *next;
// Wipe the task list, except the current Task.
ACQUIRE_LOCK(&sched_mutex);
- for (task = all_tasks; task != NULL; task=task->all_link) {
+ for (task = all_tasks; task != NULL; task=next) {
+ next = task->all_link;
if (task != keep) {
debugTrace(DEBUG_sched, "discarding task %ld", (long)TASK_ID(task));
freeTask(task);