[project @ 2006-01-06 16:30:17 by simonmar]
[ghc-hetmet.git] / ghc / rts / Task.c
index 683c665..bc140c1 100644 (file)
@@ -77,7 +77,7 @@ static Task*
 newTask (void)
 {
 #if defined(THREADED_RTS)
-    long currentElapsedTime, currentUserTime, elapsedGCTime;
+    Ticks currentElapsedTime, currentUserTime;
 #endif
     Task *task;
 
@@ -97,7 +97,8 @@ newTask (void)
 #endif
 
 #if defined(THREADED_RTS)
-    stat_getTimes(&currentElapsedTime, &currentUserTime, &elapsedGCTime);
+    currentUserTime = getThreadCPUTime();
+    currentElapsedTime = getProcessElapsedTime();
     task->mut_time = 0.0;
     task->mut_etime = 0.0;
     task->gc_time = 0.0;
@@ -174,9 +175,6 @@ void
 discardTask (Task *task)
 {
     ASSERT_LOCK_HELD(&sched_mutex);
-#if defined(THREADED_RTS)
-    closeCondition(&task->cond);
-#endif
     task->stopped = rtsTrue;
     task->cap = NULL;
     task->next = task_free_list;
@@ -188,13 +186,18 @@ taskStop (Task *task)
 {
 #if defined(THREADED_RTS)
     OSThreadId id;
-    long currentElapsedTime, currentUserTime, elapsedGCTime;
+    Ticks currentElapsedTime, currentUserTime, elapsedGCTime;
 
     id = osThreadId();
     ASSERT(task->id == id);
     ASSERT(myTask() == task);
 
-    stat_getTimes(&currentElapsedTime, &currentUserTime, &elapsedGCTime);
+    currentUserTime = getThreadCPUTime();
+    currentElapsedTime = getProcessElapsedTime();
+
+    // XXX this is wrong; we want elapsed GC time since the
+    // Task started.
+    elapsedGCTime = stat_getElapsedGCTime();
     
     task->mut_time = 
        currentUserTime - task->muttimestart - task->gc_time;