From a5d552d90942fe3c3d1adfc809638fd78992da6e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 21 Mar 2011 10:46:58 -0700 Subject: inet_diag: use rb_thread_io_blocking_region under 1.9.3dev It can detect cross-thread close() calls --- ext/raindrops/extconf.rb | 1 + ext/raindrops/linux_inet_diag.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ext/raindrops/extconf.rb b/ext/raindrops/extconf.rb index 08b5f44..141722d 100644 --- a/ext/raindrops/extconf.rb +++ b/ext/raindrops/extconf.rb @@ -10,6 +10,7 @@ $CPPFLAGS += " -D_BSD_SOURCE -D_XOPEN_SOURCE=600 " have_func("getpagesize", "unistd.h") have_func("rb_struct_alloc_noinit") have_func('rb_thread_blocking_region') +have_func('rb_thread_io_blocking_region') checking_for "GCC 4+ atomic builtins" do src = < #include #include @@ -543,7 +548,7 @@ static VALUE tcp_stats(struct nogvl_args *args, VALUE addr) gen_bytecode(&args->iov[2], &query_addr); memset(&args->stats, 0, sizeof(struct listen_stats)); - nl_errcheck(rb_thread_blocking_region(diag, args, 0, 0)); + nl_errcheck(rb_thread_io_blocking_region(diag, args, args->fd)); return rb_listen_stats(&args->stats); } @@ -610,7 +615,7 @@ static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self) "addr must be an array of strings, a string, or nil"); } - nl_errcheck(rb_thread_blocking_region(diag, &args, NULL, 0)); + nl_errcheck(rb_thread_io_blocking_region(diag, &args, args.fd)); st_foreach(args.table, NIL_P(addrs) ? st_to_hash : st_AND_hash, rv); st_free_table(args.table); -- cgit v1.2.3-24-ge0c7