X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FThreads.c;h=501c7514c736a1a94eef2760153401adfe3dd6fb;hb=de75026f5a48d3d052135a973ab4dff76c5b20f5;hp=2c7b2beb8678e8736da7cbbe4d3eb562baff3640;hpb=192c7d555448b8a78d57a5c01c0c20f642f2d0f3;p=ghc-hetmet.git diff --git a/rts/Threads.c b/rts/Threads.c index 2c7b2be..501c751 100644 --- a/rts/Threads.c +++ b/rts/Threads.c @@ -210,6 +210,8 @@ createThread(Capability *cap, nat size) } #endif + postEvent (cap, EVENT_CREATE_THREAD, tso->id, 0); + #if defined(GRAN) debugTrace(GRAN_DEBUG_pri, "==__ schedule: Created TSO %d (%p);", @@ -503,10 +505,13 @@ unblockOne_ (Capability *cap, StgTSO *tso, ASSERT(tso->bound->cap == tso->cap); tso->bound->cap = cap; } + tso->cap = cap; appendToRunQueue(cap,tso); - // we're holding a newly woken thread, make sure we context switch - // quickly so we can migrate it if necessary. + + // context-switch soonish so we can migrate the new thread if + // necessary. NB. not contextSwitchCapability(cap), which would + // force a context switch immediately. cap->context_switch = 1; } else { // we'll try to wake it up on the Capability it was last on. @@ -514,11 +519,16 @@ unblockOne_ (Capability *cap, StgTSO *tso, } #else appendToRunQueue(cap,tso); + + // context-switch soonish so we can migrate the new thread if + // necessary. NB. not contextSwitchCapability(cap), which would + // force a context switch immediately. cap->context_switch = 1; #endif - debugTrace(DEBUG_sched, - "waking up thread %ld on cap %d", + postEvent (cap, EVENT_THREAD_WAKEUP, tso->id, tso->cap->no); + + debugTrace(DEBUG_sched, "waking up thread %ld on cap %d", (long)tso->id, tso->cap->no); return next;