X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FTask.c;h=ad05208d5e986a516579acbbe5195cf066fa2345;hb=c883f6969ad957637649f3af1a2b6977555bdd32;hp=92b5c2594f707a5c7e8214ea9391f26e8bb8f262;hpb=af13609607da81e7837a7c7c598de82452363ab5;p=ghc-hetmet.git diff --git a/ghc/rts/Task.c b/ghc/rts/Task.c index 92b5c25..ad05208 100644 --- a/ghc/rts/Task.c +++ b/ghc/rts/Task.c @@ -91,7 +91,7 @@ startTask ( void (*taskStart)(void) ) taskTable[taskCount].gc_etime = 0.0; taskTable[taskCount].elapsedtimestart = stat_getElapsedTime(); - IF_DEBUG(scheduler,fprintf(stderr,"scheduler: Started task: %ld\n",tid);); + IF_DEBUG(scheduler,debugBelch("scheduler: Started task: %ld\n",tid);); return; } @@ -113,7 +113,7 @@ stopTaskManager () /* Wait for all the tasks to terminate */ for (i = 0; i < maxCount; i++) { - IF_DEBUG(scheduler,fprintf(stderr,"scheduler: waiting for task %ld\n", + IF_DEBUG(scheduler,debugBelch("scheduler: waiting for task %ld\n", taskTable[i].id)); pthread_join(taskTable[i].id, NULL); } @@ -134,6 +134,12 @@ stopTaskManager () return; } +void +resetTaskManagerAfterFork () +{ + barf("resetTaskManagerAfterFork not implemented for SMP"); +} + #else /************ THREADS version *****************/ @@ -150,7 +156,7 @@ startTaskManager( nat maxCount, taskCount = 0; } -void +rtsBool startTask ( void (*taskStart)(void) ) { int r; @@ -160,18 +166,18 @@ startTask ( void (*taskStart)(void) ) on thread_ready_cond, don't create a new one. */ if ( rts_n_waiting_tasks > 0) { - IF_DEBUG(scheduler,fprintf(stderr, + IF_DEBUG(scheduler,debugBelch( "scheduler: startTask: %d tasks waiting, not creating new one.\n", rts_n_waiting_tasks);); // the task will run as soon as a capability is available, // so there's no need to wake it. - return; + return rtsFalse; } /* If the task limit has been reached, just return. */ if (maxTasks > 0 && taskCount == maxTasks) { - IF_DEBUG(scheduler,fprintf(stderr,"scheduler: startTask: task limit (%d) reached, not creating new one.\n",maxTasks)); - return; + IF_DEBUG(scheduler,debugBelch("scheduler: startTask: task limit (%d) reached, not creating new one.\n",maxTasks)); + return rtsFalse; } @@ -181,8 +187,8 @@ startTask ( void (*taskStart)(void) ) } taskCount++; - IF_DEBUG(scheduler,fprintf(stderr,"scheduler: startTask: new task %ld (total_count: %d; waiting: %d)\n", tid, taskCount, rts_n_waiting_tasks);); - return; + IF_DEBUG(scheduler,debugBelch("scheduler: startTask: new task %ld (total_count: %d; waiting: %d)\n", tid, taskCount, rts_n_waiting_tasks);); + return rtsTrue; } @@ -192,6 +198,13 @@ stopTaskManager () { } + +void +resetTaskManagerAfterFork ( void ) +{ + rts_n_waiting_tasks = 0; + taskCount = 0; +} #endif