aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-08-21 00:53:08 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-09-14 16:44:09 +1200
commit701dcbb3ca9bf04b61cc07156608c61aaf9173f0 (patch)
tree4f732ba3b246c53a075894eb7e7758bb55e57607 /io.c
parent132453fa521cf87693035769031f3501ddc02f4a (diff)
downloadruby-701dcbb3ca9bf04b61cc07156608c61aaf9173f0.tar.gz
Add support for hooking `IO#read`.
Diffstat (limited to 'io.c')
-rw-r--r--io.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/io.c b/io.c
index fbc913bad8..f73a508a0c 100644
--- a/io.c
+++ b/io.c
@@ -2619,6 +2619,11 @@ bufread_call(VALUE arg)
static long
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);
+ }
+
long len;
struct bufread_arg arg;
@@ -8511,6 +8516,7 @@ rb_io_initialize(int argc, VALUE *argv, VALUE io)
fmode |= FMODE_PREP;
}
MakeOpenFile(io, fp);
+ fp->self = io;
fp->fd = fd;
fp->mode = fmode;
fp->encs = convconfig;