about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-05-19 20:37:01 +0000
committerEric Wong <normalperson@yhbt.net>2011-05-19 20:38:05 +0000
commitd2c4e8411bb86547d2957f692a0012aab5be358b (patch)
treeec07d7c8783d17e67108b3ae2c08c8b1909d4e69
parent8fe919a1c0f273aca4a4274a3f4c92a21886ad86 (diff)
downloadsleepy_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.c3
-rw-r--r--ext/sleepy_penguin/extconf.rb1
-rw-r--r--ext/sleepy_penguin/missing_rb_thread_fd_close.h4
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