From 9e0a48c7a31ecd39be0596d0517b9d521ae75282 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Sat, 5 Sep 2020 14:30:21 +1200 Subject: [PATCH] Prefer `rb_thread_current_scheduler`. --- io.c | 26 ++++++++++++++++++++++---- process.c | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/io.c b/io.c index f73a508a0c..ed808d071c 100644 --- a/io.c +++ b/io.c @@ -1314,7 +1314,7 @@ rb_io_from_fd(int f) int rb_io_wait_readable(int f) { - VALUE scheduler = rb_thread_scheduler_if_nonblocking(rb_thread_current()); + VALUE scheduler = rb_thread_current_scheduler(); if (scheduler != Qnil) { return RTEST( rb_scheduler_io_wait_readable(scheduler, rb_io_from_fd(f)) @@ -1345,7 +1345,7 @@ rb_io_wait_readable(int f) int rb_io_wait_writable(int f) { - VALUE scheduler = rb_thread_scheduler_if_nonblocking(rb_thread_current()); + VALUE scheduler = rb_thread_current_scheduler(); if (scheduler != Qnil) { return RTEST( rb_scheduler_io_wait_writable(scheduler, rb_io_from_fd(f)) @@ -1545,6 +1545,18 @@ io_binwrite(VALUE str, const char *ptr, long len, rb_io_t *fptr, int nosync) rb_thread_check_ints(); if ((n = len) <= 0) return n; + + VALUE scheduler = rb_thread_current_scheduler(); + if (scheduler != Qnil && rb_scheduler_supports_io_write(scheduler)) { + ssize_t length = RB_NUM2SSIZE( + rb_scheduler_io_write(scheduler, fptr->self, str, offset, len) + ); + + if (length < 0) rb_sys_fail_path(fptr->pathv); + + return length; + } + if (fptr->wbuf.ptr == NULL && !(!nosync && (fptr->mode & FMODE_SYNC))) { fptr->wbuf.off = 0; fptr->wbuf.len = 0; @@ -2621,9 +2633,15 @@ io_fread(VALUE str, long offset, long size, rb_io_t *fptr) { VALUE scheduler = rb_thread_current_scheduler(); if (scheduler != Qnil && rb_scheduler_supports_io_read(scheduler)) { - return rb_scheduler_io_read(scheduler, fptr->self, str, offset, size); + ssize_t length = RB_NUM2SSIZE( + rb_scheduler_io_read(scheduler, fptr->self, str, offset, size) + ); + + if (length < 0) rb_sys_fail_path(fptr->pathv); + + return length; } - + long len; struct bufread_arg arg; diff --git a/process.c b/process.c index 317f7ff3ec..8abb3ea86f 100644 --- a/process.c +++ b/process.c @@ -4926,7 +4926,7 @@ static VALUE rb_f_sleep(int argc, VALUE *argv, VALUE _) { time_t beg = time(0); - VALUE scheduler = rb_thread_scheduler_if_nonblocking(rb_thread_current()); + VALUE scheduler = rb_thread_current_scheduler(); if (scheduler != Qnil) { rb_scheduler_kernel_sleepv(scheduler, argc, argv);