Remove the artifical cap on the number of workers
authorSimon Marlow <simonmar@microsoft.com>
Wed, 9 Aug 2006 09:59:08 +0000 (09:59 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 9 Aug 2006 09:59:08 +0000 (09:59 +0000)
See #805.  This was here to catch bugs that resulted in an infinite
number of worker threads being created.  However, we can't put a
reasonable bound on the number of worker threads, because legitimate
programs may need to create large numbers of (probably blocked) worker
threads.  Furthermore, the OS probably has a bound on the number of
threads that a process can create in any case.

rts/Task.c

index ef20c09..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);
@@ -264,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.