[project @ 2005-05-05 13:17:47 by simonmar]
[ghc-hetmet.git] / ghc / rts / Task.c
index 06eab69..46cfa26 100644 (file)
@@ -28,7 +28,8 @@
 TaskInfo* taskTable;
 static nat taskTableSize;
 
-HashTable *taskHash; // maps OSThreadID to TaskInfo*
+// maps OSThreadID to TaskInfo*
+HashTable *taskHash;
 
 nat taskCount;
 static nat tasksRunning;
@@ -43,7 +44,12 @@ initTaskManager (void)
     static int initialized = 0;
 
     if (!initialized) {
+#if defined(SMP)
+       taskTableSize = stg_max(INIT_TASK_TABLE_SIZE, 
+                               RtsFlags.ParFlags.nNodes * 2);
+#else
        taskTableSize = INIT_TASK_TABLE_SIZE;
+#endif
        taskTable = stgMallocBytes( taskTableSize * sizeof(TaskInfo),
                                    "initTaskManager");
     
@@ -62,9 +68,17 @@ initTaskManager (void)
 static void
 expandTaskTable (void)
 {
+    nat i;
+
     taskTableSize *= 2;
     taskTable = stgReallocBytes(taskTable, taskTableSize * sizeof(TaskInfo),
                                "expandTaskTable");
+
+    /* Have to update the hash table now... */
+    for (i = 0; i < taskCount; i++) {
+       removeHashTable( taskHash, taskTable[i].id, NULL );
+       insertHashTable( taskHash, taskTable[i].id, &taskTable[i] );
+    }
 }
 
 void
@@ -82,7 +96,7 @@ stopTaskManager (void)
        prodWorker();
        yieldThread();
     }
-    errorBelch("%d tasks still running, exiting anyway", tasksRunning);
+    IF_DEBUG(scheduler, sched_belch("%d tasks still running, exiting anyway", tasksRunning));
 
     /* 
        OLD CODE follows: