From 7ba2e4a42004718af4bd6f2d2f8b5bae52ebeaab Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 2 Apr 2011 14:10:04 -0700 Subject: [PATCH] use rb_thread_io_blocking_region() under 1.9.3dev It can do cross-thread shutdowns more effectively and requires less typing in some cases. --- ext/socket_dontwait/extconf.rb | 5 +---- ext/socket_dontwait/socket_dontwait_ext.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ext/socket_dontwait/extconf.rb b/ext/socket_dontwait/extconf.rb index f43578f..436ce4e 100644 --- a/ext/socket_dontwait/extconf.rb +++ b/ext/socket_dontwait/extconf.rb @@ -1,8 +1,5 @@ require 'mkmf' have_func('rb_thread_blocking_region') or abort "Ruby 1.9 required" -if RUBY_VERSION <= '1.9.1' - $CPPFLAGS += ' -DTBR_ERRNO_WORKAROUND ' -end -dir_config('socket_dontwait') +have_func('rb_thread_io_blocking_region') create_makefile('socket_dontwait_ext') diff --git a/ext/socket_dontwait/socket_dontwait_ext.c b/ext/socket_dontwait/socket_dontwait_ext.c index 00b3c92..9a57f5b 100644 --- a/ext/socket_dontwait/socket_dontwait_ext.c +++ b/ext/socket_dontwait/socket_dontwait_ext.c @@ -15,9 +15,15 @@ struct io_args { int fd; }; -static long my_tbr(rb_blocking_function_t *fn, void *arg) +#ifndef HAVE_RB_THREAD_IO_BLOCKING_REGION +# define rb_thread_io_blocking_region(fn,data,fd) \ + rb_thread_blocking_region((fn),(data), RUBY_UBF_IO, 0) +#endif +static long my_tbr(rb_blocking_function_t *fn, void *ptr) { - return (long)rb_thread_blocking_region(fn, arg, RUBY_UBF_IO, 0); + struct io_args *args = (struct io_args *)ptr; + + return (long)rb_thread_io_blocking_region(fn, ptr, args->fd); } static int set_blocking(int fd) -- 2.11.4.GIT