X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FTask.c;h=a15758c4f1cdb73f2862306f95d3c75de10fa551;hb=d8334d807812e40f67770ffc37608c0ce66f96b2;hp=e93d60d86f6d582238f1ecce93f45885b79b0abd;hpb=65da401ae6579ad47f06bcf80b1f3022c9963ca4;p=ghc-hetmet.git diff --git a/rts/Task.c b/rts/Task.c index e93d60d..a15758c 100644 --- a/rts/Task.c +++ b/rts/Task.c @@ -348,6 +348,19 @@ workerTaskStop (Task *task) #endif +#ifdef DEBUG + +static void *taskId(Task *task) +{ +#ifdef THREADED_RTS + return (void *)task->id; +#else + return (void *)task; +#endif +} + +#endif + #if defined(THREADED_RTS) static void OSThreadProcAttr @@ -409,19 +422,19 @@ startWorkerTask (Capability *cap) RELEASE_LOCK(&task->lock); } +void +interruptWorkerTask (Task *task) +{ + ASSERT(osThreadId() != task->id); // seppuku not allowed + ASSERT(task->incall->suspended_tso); // use this only for FFI calls + interruptOSThread(task->id); + debugTrace(DEBUG_sched, "interrupted worker task %p", taskId(task)); +} + #endif /* THREADED_RTS */ #ifdef DEBUG -static void *taskId(Task *task) -{ -#ifdef THREADED_RTS - return (void *)task->id; -#else - return (void *)task; -#endif -} - void printAllTasks(void); void