Also move closeMutex() etc. into freeTaskManager, this is a free-ish thing
boundTaskExiting(task);
stopTaskManager();
}
boundTaskExiting(task);
stopTaskManager();
}
- closeMutex(&sched_mutex);
freeScheduler( void )
{
freeTaskManager();
freeScheduler( void )
{
freeTaskManager();
+#if defined(THREADED_RTS)
+ closeMutex(&sched_mutex);
+#endif
}
/* ---------------------------------------------------------------------------
}
/* ---------------------------------------------------------------------------
void
stopTaskManager (void)
{
void
stopTaskManager (void)
{
debugTrace(DEBUG_sched,
"stopping task manager, %d tasks still running",
tasksRunning);
debugTrace(DEBUG_sched,
"stopping task manager, %d tasks still running",
tasksRunning);
-
- ACQUIRE_LOCK(&sched_mutex);
- for (task = task_free_list; task != NULL; task = task->next) {
-#if defined(THREADED_RTS)
- closeCondition(&task->cond);
- closeMutex(&task->lock);
-#endif
- }
- RELEASE_LOCK(&sched_mutex);
ACQUIRE_LOCK(&sched_mutex);
for (task = task_free_list; task != NULL; task = next) {
ACQUIRE_LOCK(&sched_mutex);
for (task = task_free_list; task != NULL; task = next) {
+#if defined(THREADED_RTS)
+ closeCondition(&task->cond);
+ closeMutex(&task->lock);
+#endif
next = task->next;
stgFree(task);
}
next = task->next;
stgFree(task);
}