From 0e3b0fcdba70cf96a8e0654eb8f50aacb8024bd4 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 14 May 2020 22:10:55 +1200 Subject: Thread scheduler for light weight concurrency. --- process.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index 74301bba91..ee5b164dd7 100644 --- a/process.c +++ b/process.c @@ -4892,9 +4892,14 @@ rb_f_spawn(int argc, VALUE *argv, VALUE _) static VALUE rb_f_sleep(int argc, VALUE *argv, VALUE _) { - time_t beg, end; + VALUE scheduler = rb_current_thread_scheduler(); - beg = time(0); + if (scheduler != Qnil) { + VALUE result = rb_funcallv(scheduler, rb_intern("wait_sleep"), argc, argv); + return RTEST(result); + } + + time_t beg = time(0); if (argc == 0) { rb_thread_sleep_forever(); } @@ -4903,7 +4908,7 @@ rb_f_sleep(int argc, VALUE *argv, VALUE _) rb_thread_wait_for(rb_time_interval(argv[0])); } - end = time(0) - beg; + time_t end = time(0) - beg; return INT2FIX(end); } -- cgit v1.2.3