diff options
author | Wayne Meissner <wmeissner@gmail.com> | 2013-04-22 21:28:31 +1000 |
---|---|---|
committer | Wayne Meissner <wmeissner@gmail.com> | 2013-04-22 21:28:31 +1000 |
commit | 3b4271e00a65cf0b85672ab19c576aeb0c33f624 (patch) | |
tree | de8377df9bb30687dcd3216844da2a866344f721 /ext/ffi_c/Function.c | |
parent | be5ec1d8719d65eecfcc393209c70339cf71f2ae (diff) | |
download | ffi-3b4271e00a65cf0b85672ab19c576aeb0c33f624.tar.gz |
Check for HAVE_RB_THREAD_CALL_WITHOUT_GVL _or_ HAVE_RB_THREAD_BLOCKING_REGION
Diffstat (limited to 'ext/ffi_c/Function.c')
-rw-r--r-- | ext/ffi_c/Function.c | 12 |
1 files changed, 6 insertions, 6 deletions
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; |