summaryrefslogtreecommitdiff
path: root/scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'scheduler.c')
-rw-r--r--scheduler.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/scheduler.c b/scheduler.c
index 51696ab18f..06658356b1 100644
--- a/scheduler.c
+++ b/scheduler.c
@@ -25,8 +25,8 @@ static ID id_timeout_after;
static ID id_kernel_sleep;
static ID id_process_wait;
-static ID id_io_read;
-static ID id_io_write;
+static ID id_io_read, id_io_pread;
+static ID id_io_write, id_io_pwrite;
static ID id_io_wait;
static ID id_io_close;
@@ -46,7 +46,10 @@ Init_Fiber_Scheduler(void)
id_process_wait = rb_intern_const("process_wait");
id_io_read = rb_intern_const("io_read");
+ id_io_pread = rb_intern_const("io_pread");
id_io_write = rb_intern_const("io_write");
+ id_io_pwrite = rb_intern_const("io_pwrite");
+
id_io_wait = rb_intern_const("io_wait");
id_io_close = rb_intern_const("io_close");
@@ -239,6 +242,16 @@ rb_fiber_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t lengt
}
VALUE
+rb_fiber_scheduler_io_pread(VALUE scheduler, VALUE io, VALUE buffer, size_t length, off_t offset)
+{
+ VALUE arguments[] = {
+ io, buffer, SIZET2NUM(length), OFFT2NUM(offset)
+ };
+
+ return rb_check_funcall(scheduler, id_io_pread, 4, arguments);
+}
+
+VALUE
rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t length)
{
VALUE arguments[] = {
@@ -249,6 +262,16 @@ rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t leng
}
VALUE
+rb_fiber_scheduler_io_pwrite(VALUE scheduler, VALUE io, VALUE buffer, size_t length, off_t offset)
+{
+ VALUE arguments[] = {
+ io, buffer, SIZET2NUM(length), OFFT2NUM(offset)
+ };
+
+ return rb_check_funcall(scheduler, id_io_pwrite, 4, arguments);
+}
+
+VALUE
rb_fiber_scheduler_io_read_memory(VALUE scheduler, VALUE io, void *base, size_t size, size_t length)
{
VALUE buffer = rb_io_buffer_new(base, size, RB_IO_BUFFER_LOCKED);