diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2021-07-16 15:22:17 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2021-09-20 23:16:45 +1200 |
commit | b61064b821823e016e8015f3d9eeab3cf9074ccd (patch) | |
tree | c6f4718621a159ae5b0575dd252c4d7d409ac20c /scheduler.c | |
parent | cb8434563d3cc8fc5c3a5aa1e34ad7a9bb542cdb (diff) |
Add gvl and fiber assertions to scheduler interface to catch invalid usage.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4656
Diffstat (limited to 'scheduler.c')
-rw-r--r-- | scheduler.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/scheduler.c b/scheduler.c index cd06e55635..127d63383b 100644 --- a/scheduler.c +++ b/scheduler.c @@ -11,6 +11,7 @@ #include "vm_core.h" #include "ruby/fiber/scheduler.h" #include "ruby/io.h" +#include "internal/thread.h" static ID id_close; static ID id_scheduler_close; @@ -51,6 +52,8 @@ Init_Fiber_Scheduler(void) VALUE rb_fiber_scheduler_get(void) { + VM_ASSERT(ruby_thread_has_gvl_p()); + rb_thread_t *thread = GET_THREAD(); VM_ASSERT(thread); @@ -80,6 +83,8 @@ verify_interface(VALUE scheduler) VALUE rb_fiber_scheduler_set(VALUE scheduler) { + VM_ASSERT(ruby_thread_has_gvl_p()); + rb_thread_t *thread = GET_THREAD(); VM_ASSERT(thread); @@ -124,6 +129,8 @@ VALUE rb_fiber_scheduler_current_for_thread(VALUE thread) VALUE rb_fiber_scheduler_close(VALUE scheduler) { + VM_ASSERT(ruby_thread_has_gvl_p()); + VALUE result; result = rb_check_funcall(scheduler, id_scheduler_close, 0, NULL); @@ -194,6 +201,8 @@ rb_fiber_scheduler_block(VALUE scheduler, VALUE blocker, VALUE timeout) VALUE rb_fiber_scheduler_unblock(VALUE scheduler, VALUE blocker, VALUE fiber) { + VM_ASSERT(rb_obj_is_fiber(fiber)); + return rb_funcall(scheduler, id_unblock, 2, blocker, fiber); } |