diff options
author | Benoit Daloze <eregontp@gmail.com> | 2020-09-17 14:45:44 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2020-09-17 14:59:38 +0200 |
commit | 9472d160619861201bad91560c06248fef8362dc (patch) | |
tree | a2cf2586ca2c920c6f64f58971128982c8669dda /thread_sync.c | |
parent | 738a089b3ac55e5bfb26f9121ee73ffcb8c4a36b (diff) |
Call scheduler.block instead of scheduler.kernel_sleep for blocking Queue/SizedQueue operations
* scheduler.unblock was already already called before but with no corresponding scheduler.block
* add test that Queue#pop makes the scheduler wait until it gets an element.
Diffstat (limited to 'thread_sync.c')
-rw-r--r-- | thread_sync.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/thread_sync.c b/thread_sync.c index 5b1e4f288f..741bff6160 100644 --- a/thread_sync.c +++ b/thread_sync.c @@ -483,9 +483,9 @@ rb_mutex_abandon_all(rb_mutex_t *mutexes) #endif static VALUE -rb_mutex_sleep_forever(VALUE time) +rb_mutex_sleep_forever(VALUE self) { - rb_thread_sleep_deadly_allow_spurious_wakeup(); + rb_thread_sleep_deadly_allow_spurious_wakeup(self); return Qnil; } @@ -516,7 +516,7 @@ rb_mutex_sleep(VALUE self, VALUE timeout) mutex_lock_uninterruptible(self); } else { if (NIL_P(timeout)) { - rb_ensure(rb_mutex_sleep_forever, Qnil, mutex_lock_uninterruptible, self); + rb_ensure(rb_mutex_sleep_forever, self, mutex_lock_uninterruptible, self); } else { rb_hrtime_t rel = rb_timeval2hrtime(&t); rb_ensure(rb_mutex_wait_for, (VALUE)&rel, mutex_lock_uninterruptible, self); @@ -904,9 +904,9 @@ rb_queue_push(VALUE self, VALUE obj) } static VALUE -queue_sleep(VALUE arg) +queue_sleep(VALUE self) { - rb_thread_sleep_deadly_allow_spurious_wakeup(); + rb_thread_sleep_deadly_allow_spurious_wakeup(self); return Qnil; } |