TaskInfo* taskTable;
static nat taskTableSize;
-HashTable *taskHash; // maps OSThreadID to TaskInfo*
+// maps OSThreadID to TaskInfo*
+HashTable *taskHash;
nat taskCount;
static nat tasksRunning;
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");
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
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: