static VALUE rb_mutex_exclusive_unlock_inner(Mutex *mutex) { VALUE waking; waking = unlock_mutex_inner(mutex); rb_yield(Qundef); return waking; }
static void wait_condvar(ConditionVariable *condvar, Mutex *mutex) { //rb_thread_critical = 1; if (rb_thread_current() != mutex->owner) { //rb_thread_critical = 0; rb_raise(private_eThreadError, "not owner of the synchronization mutex"); } unlock_mutex_inner(mutex); rb_ensure(wait_list, (VALUE)&condvar->waiting, lock_mutex, (VALUE)mutex); }
static void wait_condvar(ConditionVariable *condvar, Mutex *mutex) { VALUE waking; rb_thread_critical = 1; if (rb_thread_current() != mutex->owner) { rb_thread_critical = 0; rb_raise(rb_eThreadError, "not owner of the synchronization mutex"); } waking = unlock_mutex_inner(mutex); if (RTEST(waking)) { wake_thread(waking); } rb_ensure(wait_list, (VALUE)&condvar->waiting, lock_mutex, (VALUE)mutex); }