diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-05-19 20:37:01 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-05-19 20:38:05 +0000 |
commit | d2c4e8411bb86547d2957f692a0012aab5be358b (patch) | |
tree | ec07d7c8783d17e67108b3ae2c08c8b1909d4e69 | |
parent | 8fe919a1c0f273aca4a4274a3f4c92a21886ad86 (diff) | |
download | sleepy_penguin-d2c4e8411bb86547d2957f692a0012aab5be358b.tar.gz |
rb_thread_fd_close is in both MRI 1.8 and MRI 1.9.3dev
-rw-r--r-- | ext/sleepy_penguin/epoll.c | 3 | ||||
-rw-r--r-- | ext/sleepy_penguin/extconf.rb | 1 | ||||
-rw-r--r-- | ext/sleepy_penguin/missing_rb_thread_fd_close.h | 4 |
3 files changed, 7 insertions, 1 deletions
diff --git a/ext/sleepy_penguin/epoll.c b/ext/sleepy_penguin/epoll.c index 8b93817..81e7623 100644 --- a/ext/sleepy_penguin/epoll.c +++ b/ext/sleepy_penguin/epoll.c @@ -7,7 +7,7 @@ #else # include <st.h> #endif - +#include "missing_rb_thread_fd_close.h" #define EP_RECREATE (-2) static st_table *active; @@ -524,6 +524,7 @@ static VALUE epclose(VALUE self) int fd = ep->fd; ep->fd = -1; + rb_thread_fd_close(fd); err = close(fd); if (err == -1) rb_sys_fail("close"); diff --git a/ext/sleepy_penguin/extconf.rb b/ext/sleepy_penguin/extconf.rb index fd0993c..e089562 100644 --- a/ext/sleepy_penguin/extconf.rb +++ b/ext/sleepy_penguin/extconf.rb @@ -9,5 +9,6 @@ have_header('sys/signalfd.h') have_header('ruby/io.h') and have_struct_member('rb_io_t', 'fd', 'ruby/io.h') have_func('epoll_create1', %w(sys/epoll.h)) have_func('rb_thread_blocking_region') +have_func('rb_thread_fd_close') have_library('pthread') create_makefile('sleepy_penguin_ext') diff --git a/ext/sleepy_penguin/missing_rb_thread_fd_close.h b/ext/sleepy_penguin/missing_rb_thread_fd_close.h new file mode 100644 index 0000000..e4891c2 --- /dev/null +++ b/ext/sleepy_penguin/missing_rb_thread_fd_close.h @@ -0,0 +1,4 @@ +#ifndef HAVE_RB_THREAD_FD_CLOSE +#define HAVE_RB_THREAD_FD_CLOSE +# define rb_thread_fd_close(fd) for (;0;) +#endif |