diff --git a/thread_sync.c b/thread_sync.c index 492a44992e..efe295e64c 100644 --- a/thread_sync.c +++ b/thread_sync.c @@ -223,6 +223,17 @@ rb_mutex_trylock(VALUE self) */ static const rb_thread_t *patrol_thread = NULL; +static VALUE +mutex_owned_p(rb_thread_t *th, rb_mutex_t *mutex) +{ + if (mutex->th == th) { + return Qtrue; + } + else { + return Qfalse; + } +} + static VALUE do_mutex_lock(VALUE self, int interruptible_p) { @@ -298,6 +309,10 @@ do_mutex_lock(VALUE self, int interruptible_p) } } } + + // assertion + if (mutex_owned_p(th, mutex) == Qfalse) rb_bug("do_mutex_lock: mutex is not owned."); + return self; } @@ -329,14 +344,10 @@ rb_mutex_lock(VALUE self) VALUE rb_mutex_owned_p(VALUE self) { - VALUE owned = Qfalse; rb_thread_t *th = GET_THREAD(); rb_mutex_t *mutex = mutex_ptr(self); - if (mutex->th == th) - owned = Qtrue; - - return owned; + return mutex_owned_p(th, mutex); } static const char *