X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FCapability.c;h=3ea96fe7701990cd6aa1d183c84517e14faf5d45;hb=be0242d094f9b3091b15f200ac9d978576b7b681;hp=18ef4df2afff7f651d521f5e315ae028463239f1;hpb=fdb2b1fd406dddc78902607483961c323787ac9a;p=ghc-hetmet.git diff --git a/ghc/rts/Capability.c b/ghc/rts/Capability.c index 18ef4df..3ea96fe 100644 --- a/ghc/rts/Capability.c +++ b/ghc/rts/Capability.c @@ -137,6 +137,9 @@ static Capability *returning_capabilities; threaded RTS, clients must use waitFor*Capability()). ------------------------------------------------------------------------- */ +#if defined(RTS_SUPPORTS_THREADS) +static +#endif void grabCapability( Capability** cap ) { @@ -152,7 +155,9 @@ grabCapability( Capability** cap ) free_capabilities = (*cap)->link; rts_n_free_capabilities--; #endif +#if defined(RTS_SUPPORTS_THREADS) IF_DEBUG(scheduler, sched_belch("worker: got capability")); +#endif } /* ---------------------------------------------------------------------------- @@ -206,7 +211,9 @@ releaseCapability( Capability* cap UNUSED_IF_NOT_SMP ) rts_n_free_capabilities = 1; #endif // Signal that a capability is available - signalCondition(&thread_ready_cond); + if (rts_n_waiting_tasks > 0) { + signalCondition(&thread_ready_cond); + } startSchedulerTaskIfNecessary(); IF_DEBUG(scheduler, sched_belch("worker: released capability")); }