about summary refs log tree commit homepage
path: root/ext/kgio/tryopen.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/kgio/tryopen.c')
-rw-r--r--ext/kgio/tryopen.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/ext/kgio/tryopen.c b/ext/kgio/tryopen.c
index 50bacf4..20f3f6d 100644
--- a/ext/kgio/tryopen.c
+++ b/ext/kgio/tryopen.c
@@ -33,23 +33,24 @@ struct open_args {
 #  define rb_cloexec_open(p,f,m) open((p),(f),(m))
 #endif
 
-static VALUE nogvl_open(void *ptr)
+static void * nogvl_open(void *ptr)
 {
         struct open_args *o = ptr;
+        long fd = (long)rb_cloexec_open(o->pathname, o->flags, o->mode);
 
-        return (VALUE)rb_cloexec_open(o->pathname, o->flags, o->mode);
+        return (void *)fd;
 }
 
-#ifndef KGIO_HAVE_THREAD_CALL_WITHOUT_GVL
+#ifndef KGIO_WITHOUT_GVL
 #  define RUBY_UBF_IO ((void *)(-1))
 #  include "rubysig.h"
-typedef void rb_unblock_function_t(void *);
-typedef VALUE rb_blocking_function_t(void *);
-static VALUE my_thread_blocking_region(
-        rb_blocking_function_t *fn, void *data1,
-        rb_unblock_function_t *ubf, void *data2)
+typedef void my_unblock_function_t(void *);
+typedef void *my_blocking_function_t(void *);
+static void * my_thread_blocking_region(
+        my_blocking_function_t *fn, void *data1,
+        my_unblock_function_t *ubf, void *data2)
 {
-        VALUE rv;
+        void *rv;
 
         TRAP_BEG; /* for FIFO */
         rv = fn(data1);
@@ -57,9 +58,9 @@ static VALUE my_thread_blocking_region(
 
         return rv;
 }
-#define rb_thread_blocking_region(fn,data1,ubf,data2) \
+#define KGIO_WITHOUT_GVL(fn,data1,ubf,data2) \
         my_thread_blocking_region((fn),(data1),(ubf),(data2))
-#endif /* ! KGIO_HAVE_THREAD_CALL_WITHOUT_GVL */
+#endif /* ! KGIO_WITHOUT_GVL */
 
 /*
  * call-seq:
@@ -107,7 +108,7 @@ static VALUE s_tryopen(int argc, VALUE *argv, VALUE klass)
         }
 
 retry:
-        fd = (long)rb_thread_blocking_region(nogvl_open, &o, RUBY_UBF_IO, 0);
+        fd = (long)KGIO_WITHOUT_GVL(nogvl_open, &o, RUBY_UBF_IO, 0);
         if (fd < 0) {
                 if (errno == EMFILE || errno == ENFILE || errno == ENOMEM) {
                         rb_gc();