diff options
author | nagachika <nagachika@ruby-lang.org> | 2021-05-23 14:36:05 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2021-05-23 14:36:05 +0900 |
commit | f9196de1dee6f5ab8b6fe115070b92775a3500fe (patch) | |
tree | 8b919deccbc736bcf2c533f3b7d2e96eb488ad5b /ext | |
parent | 31816356eee6313fe968eecd4cd3ad9ac4848819 (diff) |
merge revision(s) 3a3b19b2bba49e5d6f1cf13764eb6dd701397be9: [Backport #17827]
Fix Monitor to lock per Fiber, like Mutex [Bug #17827]
---
ext/monitor/monitor.c | 10 +++++-----
test/monitor/test_monitor.rb | 7 +++++++
2 files changed, 12 insertions(+), 5 deletions(-)
Diffstat (limited to 'ext')
-rw-r--r-- | ext/monitor/monitor.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/ext/monitor/monitor.c b/ext/monitor/monitor.c index 627d8211d6..ec00fa6a7f 100644 --- a/ext/monitor/monitor.c +++ b/ext/monitor/monitor.c @@ -53,7 +53,7 @@ monitor_ptr(VALUE monitor) static int mc_owner_p(struct rb_monitor *mc) { - return mc->owner == rb_thread_current(); + return mc->owner == rb_fiber_current(); } static VALUE @@ -65,7 +65,7 @@ monitor_try_enter(VALUE monitor) if (!rb_mutex_trylock(mc->mutex)) { return Qfalse; } - RB_OBJ_WRITE(monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(monitor, &mc->owner, rb_fiber_current()); mc->count = 0; } mc->count += 1; @@ -78,7 +78,7 @@ monitor_enter(VALUE monitor) struct rb_monitor *mc = monitor_ptr(monitor); if (!mc_owner_p(mc)) { rb_mutex_lock(mc->mutex); - RB_OBJ_WRITE(monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(monitor, &mc->owner, rb_fiber_current()); mc->count = 0; } mc->count++; @@ -90,7 +90,7 @@ monitor_check_owner(VALUE monitor) { struct rb_monitor *mc = monitor_ptr(monitor); if (!mc_owner_p(mc)) { - rb_raise(rb_eThreadError, "current thread not owner"); + rb_raise(rb_eThreadError, "current fiber not owner"); } return Qnil; } @@ -161,7 +161,7 @@ monitor_enter_for_cond(VALUE v) struct wait_for_cond_data *data = (struct wait_for_cond_data *)v; struct rb_monitor *mc = monitor_ptr(data->monitor); - RB_OBJ_WRITE(data->monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(data->monitor, &mc->owner, rb_fiber_current()); mc->count = NUM2LONG(data->count); return Qnil; } |