Remove the artifical cap on the number of workers
[ghc-hetmet.git] / rts / Task.c
index c8cd9c4..57497e4 100644 (file)
@@ -28,8 +28,6 @@
 Task *all_tasks = NULL;
 static Task *task_free_list = NULL; // singly-linked
 static nat taskCount;
-#define DEFAULT_MAX_WORKERS 64
-static nat maxWorkers; // we won't create more workers than this
 static nat tasksRunning;
 static nat workerCount;
 
@@ -58,11 +56,6 @@ initTaskManager (void)
        taskCount = 0;
        workerCount = 0;
        tasksRunning = 0;
-#if defined(THREADED_RTS)
-       maxWorkers = DEFAULT_MAX_WORKERS * RtsFlags.ParFlags.nNodes;
-#else
-       maxWorkers = DEFAULT_MAX_WORKERS;
-#endif
        initialized = 1;
 #if defined(THREADED_RTS)
        newThreadLocalKey(&currentTaskKey);
@@ -74,9 +67,19 @@ initTaskManager (void)
 void
 stopTaskManager (void)
 {
+    Task *task, *next;
+
     debugTrace(DEBUG_sched, 
               "stopping task manager, %d tasks still running",
               tasksRunning);
+
+    ACQUIRE_LOCK(&sched_mutex);
+    for (task = task_free_list; task != NULL; next) {
+        next = task->next;
+        stgFree(task);
+    }
+    task_free_list = NULL;
+    RELEASE_LOCK(&sched_mutex);
 }
 
 
@@ -254,9 +257,6 @@ startWorkerTask (Capability *cap,
   OSThreadId tid;
   Task *task;
 
-  if (workerCount >= maxWorkers) {
-      barf("too many workers; runaway worker creation?");
-  }
   workerCount++;
 
   // A worker always gets a fresh Task structure.