summaryrefslogtreecommitdiff
path: root/ext/thread
diff options
context:
space:
mode:
Diffstat (limited to 'ext/thread')
-rw-r--r--ext/thread/thread.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/ext/thread/thread.c b/ext/thread/thread.c
index 54681a8c90..d617185a26 100644
--- a/ext/thread/thread.c
+++ b/ext/thread/thread.c
@@ -430,8 +430,13 @@ unlock_mutex_inner(Mutex *mutex)
VALUE waking;
if (!RTEST(mutex->owner)) {
- return Qundef;
+ rb_raise(rb_eThreadError, "not owner");
}
+
+ if (mutex->owner != rb_thread_current()) {
+ rb_raise(rb_eThreadError, "not owner");
+ }
+
mutex->owner = Qnil;
waking = wake_one(&mutex->waiting);