Example #1
0
static VALUE
rb_mutex_exclusive_unlock_inner(Mutex *mutex)
{
    VALUE waking;
    waking = unlock_mutex_inner(mutex);
    rb_yield(Qundef);
    return waking;
}
Example #2
0
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);
}
Example #3
0
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);
}