threaded RTS, clients must use waitFor*Capability()).
------------------------------------------------------------------------- */
+#if defined(RTS_SUPPORTS_THREADS)
+static
+#endif
void
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
}
/* ----------------------------------------------------------------------------
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"));
}