#include "RtsFlags.h"
#include "Schedule.h"
#include "Hash.h"
+#include "Trace.h"
#if HAVE_SIGNAL_H
#include <signal.h>
void
stopTaskManager (void)
{
- IF_DEBUG(scheduler, sched_belch("stopping task manager, %d tasks still running", tasksRunning));
+ debugTrace(DEBUG_sched,
+ "stopping task manager, %d tasks still running",
+ tasksRunning);
}
#if defined(THREADED_RTS)
currentUserTime = getThreadCPUTime();
currentElapsedTime = getProcessElapsedTime();
- task->mut_time = 0.0;
- task->mut_etime = 0.0;
- task->gc_time = 0.0;
- task->gc_etime = 0.0;
+ task->mut_time = 0;
+ task->mut_etime = 0;
+ task->gc_time = 0;
+ task->gc_etime = 0;
task->muttimestart = currentUserTime;
task->elapsedtimestart = currentElapsedTime;
#endif
taskEnter(task);
- IF_DEBUG(scheduler,sched_belch("new task (taskCount: %d)", taskCount););
+ debugTrace(DEBUG_sched, "new task (taskCount: %d)", taskCount);
return task;
}
task_free_list = task;
RELEASE_LOCK(&sched_mutex);
- IF_DEBUG(scheduler,sched_belch("task exiting"));
+ debugTrace(DEBUG_sched, "task exiting");
}
#ifdef THREADED_RTS
{
ASSERT_LOCK_HELD(&sched_mutex);
if (!task->stopped) {
- IF_DEBUG(scheduler,sched_belch("discarding task %p", TASK_ID(task)));
+ debugTrace(DEBUG_sched, "discarding task %p", TASK_ID(task));
task->cap = NULL;
task->tso = NULL;
task->stopped = rtsTrue;
}
void
-taskStop (Task *task)
+taskTimeStamp (Task *task USED_IF_THREADS)
{
#if defined(THREADED_RTS)
- OSThreadId id;
Ticks currentElapsedTime, currentUserTime, elapsedGCTime;
- id = osThreadId();
- ASSERT(task->id == id);
- ASSERT(myTask() == task);
-
currentUserTime = getThreadCPUTime();
currentElapsedTime = getProcessElapsedTime();
task->mut_etime =
currentElapsedTime - task->elapsedtimestart - elapsedGCTime;
- if (task->mut_time < 0.0) { task->mut_time = 0.0; }
- if (task->mut_etime < 0.0) { task->mut_etime = 0.0; }
+ if (task->mut_time < 0) { task->mut_time = 0; }
+ if (task->mut_etime < 0) { task->mut_etime = 0; }
+#endif
+}
+
+void
+workerTaskStop (Task *task)
+{
+#if defined(THREADED_RTS)
+ OSThreadId id;
+ id = osThreadId();
+ ASSERT(task->id == id);
+ ASSERT(myTask() == task);
#endif
+ taskTimeStamp(task);
task->stopped = rtsTrue;
tasksRunning--;
}
barf("startTask: Can't create new task");
}
- IF_DEBUG(scheduler,sched_belch("new worker task (taskCount: %d)", taskCount););
+ debugTrace(DEBUG_sched, "new worker task (taskCount: %d)", taskCount);
task->id = tid;