1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Prefer rb_thread_current_scheduler.

This commit is contained in:
Samuel Williams 2020-09-05 14:30:21 +12:00
parent 701dcbb3ca
commit 9e0a48c7a3
Notes: git 2020-09-14 13:44:37 +09:00
2 changed files with 23 additions and 5 deletions

26
io.c
View file

@ -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;

View file

@ -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);