diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-08-01 04:47:53 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-08-01 04:47:53 +0000 |
commit | 35a76874dbfc56c350c591efff198f3526422f18 (patch) | |
tree | 7c2e664824305a36c3f2e377e7588fada3d7e505 /thread.c | |
parent | d8225d9f048e0df232cde5f17941b8e06d621d0b (diff) | |
download | ruby-35a76874dbfc56c350c591efff198f3526422f18.tar.gz |
thread.c: thread_shield_get_mutex
* thread.c (thread_shield_get_mutex): explicitly check if
destroyed already.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r-- | thread.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -4713,13 +4713,22 @@ rb_thread_shield_wait(VALUE self) return rb_thread_shield_waiting(self) > 0 ? Qnil : Qfalse; } +static VALUE +thread_shield_get_mutex(VALUE self) +{ + VALUE mutex = GetThreadShieldPtr(self); + if (!mutex) + rb_raise(rb_eThreadError, "destroyed thread shield - %p", (void *)mutex); + return mutex; +} + /* * Release a thread shield, and return true if it has waiting threads. */ VALUE rb_thread_shield_release(VALUE self) { - VALUE mutex = GetThreadShieldPtr(self); + VALUE mutex = thread_shield_get_mutex(self); rb_mutex_unlock(mutex); return rb_thread_shield_waiting(self) > 0 ? Qtrue : Qfalse; } @@ -4730,7 +4739,7 @@ rb_thread_shield_release(VALUE self) VALUE rb_thread_shield_destroy(VALUE self) { - VALUE mutex = GetThreadShieldPtr(self); + VALUE mutex = thread_shield_get_mutex(self); DATA_PTR(self) = 0; rb_mutex_unlock(mutex); return rb_thread_shield_waiting(self) > 0 ? Qtrue : Qfalse; |