Commit 16403f0d authored by Edsko de Vries's avatar Edsko de Vries Committed by Austin Seipp

Acquire all_tasks_mutex in forkProcess

Summary: (for the same reason that we acquire all the other mutexes)

Test Plan: validate

Reviewers: simonmar, austin, duncan

Reviewed By: simonmar, austin, duncan

Subscribers: simonmar, relrod, carter

Differential Revision: https://phabricator.haskell.org/D60
parent 39630ab1
......@@ -1802,6 +1802,10 @@ forkProcess(HsStablePtr *entry
ACQUIRE_LOCK(&capabilities[i]->lock);
}
#ifdef THREADED_RTS
ACQUIRE_LOCK(&all_tasks_mutex);
#endif
stopTimer(); // See #4074
#if defined(TRACING)
......@@ -1823,13 +1827,18 @@ forkProcess(HsStablePtr *entry
releaseCapability_(capabilities[i],rtsFalse);
RELEASE_LOCK(&capabilities[i]->lock);
}
#ifdef THREADED_RTS
RELEASE_LOCK(&all_tasks_mutex);
#endif
boundTaskExiting(task);
// just return the pid
return pid;
} else { // child
#if defined(THREADED_RTS)
initMutex(&sched_mutex);
initMutex(&sm_mutex);
......@@ -1839,6 +1848,8 @@ forkProcess(HsStablePtr *entry
for (i=0; i < n_capabilities; i++) {
initMutex(&capabilities[i]->lock);
}
initMutex(&all_tasks_mutex);
#endif
#ifdef TRACING
......
......@@ -39,7 +39,7 @@ static Task * allocTask (void);
static Task * newTask (rtsBool);
#if defined(THREADED_RTS)
static Mutex all_tasks_mutex;
Mutex all_tasks_mutex;
#endif
/* -----------------------------------------------------------------------------
......
......@@ -171,6 +171,11 @@ isBoundTask (Task *task)
//
extern Task *all_tasks;
// The all_tasks list is protected by the all_tasks_mutex
#if defined(THREADED_RTS)
extern Mutex all_tasks_mutex;
#endif
// Start and stop the task manager.
// Requires: sched_mutex.
//
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment