Condition variables must _always_ wake up somebody.

This commit is contained in:
Juan Jose Garcia Ripoll 2012-03-29 16:47:55 +02:00
parent 4cf99dce0b
commit 9331ec4ac5

View file

@ -86,21 +86,15 @@ mp_condition_variable_timedwait(cl_object cv, cl_object lock, cl_object seconds)
cl_object
mp_condition_variable_signal(cl_object cv)
{
if (cv->condition_variable.waiter != Cnil) {
cv->condition_variable.waiter = Cnil;
ecl_wakeup_waiters(ecl_process_env(), cv,
ECL_WAKEUP_ONE | ECL_WAKEUP_RESET_FLAG);
}
ecl_wakeup_waiters(ecl_process_env(), cv,
ECL_WAKEUP_ONE | ECL_WAKEUP_RESET_FLAG);
@(return Ct)
}
cl_object
mp_condition_variable_broadcast(cl_object cv)
{
if (cv->condition_variable.waiter != Cnil) {
cv->condition_variable.waiter = Cnil;
ecl_wakeup_waiters(ecl_process_env(), cv,
ECL_WAKEUP_ALL | ECL_WAKEUP_RESET_FLAG);
}
ecl_wakeup_waiters(ecl_process_env(), cv,
ECL_WAKEUP_ALL | ECL_WAKEUP_RESET_FLAG);
@(return Ct)
}