Skip to content

Commit

Permalink
Prefer rb_thread_current_scheduler.
Browse files Browse the repository at this point in the history
  • Loading branch information
ioquatix committed Sep 14, 2020
1 parent 701dcbb commit 9e0a48c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
26 changes: 22 additions & 4 deletions io.c
Expand Up @@ -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))
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion process.c
Expand Up @@ -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);
Expand Down

0 comments on commit 9e0a48c

Please sign in to comment.