X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FSchedule.c;h=3f428141dff7f48641386855c0a25388c79b86d2;hb=c1572a8968e1a0fac2c70e0172d5f304d560b2f3;hp=f8a8748d8ded1df2cdd21369acdf9d1a0de3ac19;hpb=d572aed64d9c40dcc38a49b09d18f301555e4efb;p=ghc-hetmet.git diff --git a/rts/Schedule.c b/rts/Schedule.c index f8a8748..3f42814 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -969,10 +969,10 @@ scheduleDetectDeadlock (Capability *cap, Task *task) * Send pending messages (PARALLEL_HASKELL only) * ------------------------------------------------------------------------- */ +#if defined(PARALLEL_HASKELL) static StgTSO * scheduleSendPendingMessages(void) { -#if defined(PARALLEL_HASKELL) # if defined(PAR) // global Mem.Mgmt., omit for now if (PendingFetches != END_BF_QUEUE) { @@ -985,8 +985,8 @@ scheduleSendPendingMessages(void) // packets which have become too old... sendOldBuffers(); } -#endif } +#endif /* ---------------------------------------------------------------------------- * Activate spark threads (PARALLEL_HASKELL only) @@ -1402,7 +1402,6 @@ scheduleNeedHeapProfile( rtsBool ready_to_gc STG_UNUSED ) static Capability * scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major) { - StgTSO *t; rtsBool heap_census; #ifdef THREADED_RTS /* extern static volatile StgWord waiting_for_gc; @@ -1913,7 +1912,7 @@ scheduleWaitThread (StgTSO* tso, /*[out]*/HaskellObj* ret, Capability *cap) * ------------------------------------------------------------------------- */ #if defined(THREADED_RTS) -void +void OSThreadProcAttr workerStart(Task *task) { Capability *cap; @@ -2193,7 +2192,7 @@ static StgTSO * threadStackUnderflow (Task *task STG_UNUSED, StgTSO *tso) { bdescr *bd, *new_bd; - lnat new_tso_size_w, tso_size_w; + lnat free_w, tso_size_w; StgTSO *new_tso; tso_size_w = tso_sizeW(tso); @@ -2208,19 +2207,19 @@ threadStackUnderflow (Task *task STG_UNUSED, StgTSO *tso) // while we are moving the TSO: lockClosure((StgClosure *)tso); - new_tso_size_w = round_to_mblocks(tso_size_w/2); - - debugTrace(DEBUG_sched, "thread %ld: reducing TSO size from %lu words to %lu", - tso->id, tso_size_w, new_tso_size_w); + // this is the number of words we'll free + free_w = round_to_mblocks(tso_size_w/2); bd = Bdescr((StgPtr)tso); - new_bd = splitLargeBlock(bd, new_tso_size_w / BLOCK_SIZE_W); - new_bd->free = bd->free; + new_bd = splitLargeBlock(bd, free_w / BLOCK_SIZE_W); bd->free = bd->start + TSO_STRUCT_SIZEW; new_tso = (StgTSO *)new_bd->start; memcpy(new_tso,tso,TSO_STRUCT_SIZE); - new_tso->stack_size = new_tso_size_w - TSO_STRUCT_SIZEW; + new_tso->stack_size = new_bd->free - new_tso->stack; + + debugTrace(DEBUG_sched, "thread %ld: reducing TSO size from %lu words to %lu", + (long)tso->id, tso_size_w, tso_sizeW(new_tso)); tso->what_next = ThreadRelocated; tso->_link = new_tso; // no write barrier reqd: same generation