diff --git a/include/ruby/fiber/scheduler.h b/include/ruby/fiber/scheduler.h index 213a8b8a1f..4979880d9c 100644 --- a/include/ruby/fiber/scheduler.h +++ b/include/ruby/fiber/scheduler.h @@ -22,7 +22,8 @@ VALUE rb_fiber_scheduler_make_timeout(struct timeval *timeout); VALUE rb_fiber_scheduler_close(VALUE scheduler); -VALUE rb_fiber_scheduler_timeout_raise(VALUE scheduler, VALUE duration); +VALUE rb_fiber_scheduler_timeout_raise(VALUE scheduler, VALUE timeout, VALUE exception, VALUE message); +VALUE rb_fiber_scheduler_timeout_raisev(VALUE scheduler, int argc, VALUE * argv); VALUE rb_fiber_scheduler_kernel_sleep(VALUE scheduler, VALUE duration); VALUE rb_fiber_scheduler_kernel_sleepv(VALUE scheduler, int argc, VALUE * argv); diff --git a/scheduler.c b/scheduler.c index a3de6131f0..49fb6e1408 100644 --- a/scheduler.c +++ b/scheduler.c @@ -110,10 +110,19 @@ rb_fiber_scheduler_make_timeout(struct timeval *timeout) return Qnil; } -VALUE -rb_fiber_scheduler_timeout_raise(VALUE scheduler, VALUE timeout) +VALUE rb_fiber_scheduler_timeout_raise(VALUE scheduler, VALUE timeout, VALUE exception, VALUE message) { - return rb_check_funcall(scheduler, id_timeout_raise, 1, &timeout); + VALUE arguments[] = { + timeout, exception, message + }; + + return rb_check_funcall(scheduler, id_timeout_raise, 3, arguments); +} + +VALUE +rb_fiber_scheduler_timeout_raisev(VALUE scheduler, int argc, VALUE * argv) +{ + return rb_check_funcall(scheduler, id_timeout_raise, argc, argv); } VALUE