summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Meissner <wmeissner@gmail.com>2013-04-22 21:28:31 +1000
committerWayne Meissner <wmeissner@gmail.com>2013-04-22 21:28:31 +1000
commit3b4271e00a65cf0b85672ab19c576aeb0c33f624 (patch)
treede8377df9bb30687dcd3216844da2a866344f721
parentbe5ec1d8719d65eecfcc393209c70339cf71f2ae (diff)
downloadffi-3b4271e00a65cf0b85672ab19c576aeb0c33f624.tar.gz
Check for HAVE_RB_THREAD_CALL_WITHOUT_GVL _or_ HAVE_RB_THREAD_BLOCKING_REGION
-rw-r--r--ext/ffi_c/Call.c2
-rw-r--r--ext/ffi_c/Function.c12
2 files changed, 7 insertions, 7 deletions
diff --git a/ext/ffi_c/Call.c b/ext/ffi_c/Call.c
index 2b84980..7dcdd93 100644
--- a/ext/ffi_c/Call.c
+++ b/ext/ffi_c/Call.c
@@ -34,7 +34,7 @@
#endif
#include <errno.h>
#include <ruby.h>
-#if defined(HAVE_NATIVETHREAD) && defined(HAVE_RB_THREAD_BLOCKING_REGION) && !defined(_WIN32)
+#if defined(HAVE_NATIVETHREAD) && (defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && !defined(_WIN32)
# include <signal.h>
# include <pthread.h>
#endif
diff --git a/ext/ffi_c/Function.c b/ext/ffi_c/Function.c
index 5d05b73..47fc568 100644
--- a/ext/ffi_c/Function.c
+++ b/ext/ffi_c/Function.c
@@ -122,13 +122,13 @@ static struct gvl_callback* async_cb_list = NULL;
# ifndef _WIN32
static pthread_mutex_t async_cb_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t async_cb_cond = PTHREAD_COND_INITIALIZER;
-# if !defined(HAVE_RB_THREAD_BLOCKING_REGION)
+# if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
static int async_cb_pipe[2];
# endif
# else
static HANDLE async_cb_cond;
static CRITICAL_SECTION async_cb_lock;
-# if !defined(HAVE_RB_THREAD_BLOCKING_REGION)
+# if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
static int async_cb_pipe[2];
# endif
# endif
@@ -309,9 +309,9 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
#if defined(DEFER_ASYNC_CALLBACK)
if (async_cb_thread == Qnil) {
-#if !defined(HAVE_RB_THREAD_BLOCKING_REGION) && defined(_WIN32)
+#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && defined(_WIN32)
_pipe(async_cb_pipe, 1024, O_BINARY);
-#elif !defined(HAVE_RB_THREAD_BLOCKING_REGION)
+#elif !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
pipe(async_cb_pipe);
fcntl(async_cb_pipe[0], F_SETFL, fcntl(async_cb_pipe[0], F_GETFL) | O_NONBLOCK);
fcntl(async_cb_pipe[1], F_SETFL, fcntl(async_cb_pipe[1], F_GETFL) | O_NONBLOCK);
@@ -475,7 +475,7 @@ callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data)
async_cb_list = &cb;
pthread_mutex_unlock(&async_cb_mutex);
-#if !defined(HAVE_RB_THREAD_BLOCKING_REGION)
+#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
/* Only signal if the list was empty */
if (empty) {
char c;
@@ -507,7 +507,7 @@ callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data)
async_cb_list = &cb;
LeaveCriticalSection(&async_cb_lock);
-#if !defined(HAVE_RB_THREAD_BLOCKING_REGION)
+#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
/* Only signal if the list was empty */
if (empty) {
char c;