summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Meissner <wmeissner@gmail.com>2013-04-23 19:45:56 +1000
committerWayne Meissner <wmeissner@gmail.com>2013-04-23 19:45:56 +1000
commit0af3bbae866ae5ff10372f4c9960eedd278e30b0 (patch)
tree92bc368af95457aa0a25e7cf398efb888f55e964
parente9691691ce1c784572eaf894519c2a725705b1ab (diff)
downloadffi-0af3bbae866ae5ff10372f4c9960eedd278e30b0.tar.gz
Check for HAVE_RB_THREAD_CALL_WITH_GVL
-rw-r--r--ext/ffi_c/Function.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/ext/ffi_c/Function.c b/ext/ffi_c/Function.c
index 86f38db..bbf4cec 100644
--- a/ext/ffi_c/Function.c
+++ b/ext/ffi_c/Function.c
@@ -465,7 +465,7 @@ callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data)
if (cb.frame != NULL && cb.frame->has_gvl) {
callback_with_gvl(&cb);
-#if defined(RB_THREAD_CALL_WITH_GVL)
+#if defined(HAVE_RB_THREAD_CALL_WITH_GVL)
} else if (cb.frame != NULL) {
rb_thread_call_with_gvl(callback_with_gvl, &cb);
#endif
@@ -481,9 +481,9 @@ callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data)
empty = async_cb_list == NULL;
cb.next = async_cb_list;
async_cb_list = &cb;
- pthread_mutex_unlock(&async_cb_mutex);
#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL))
+ pthread_mutex_unlock(&async_cb_mutex);
/* Only signal if the list was empty */
if (empty) {
char c;
@@ -491,6 +491,7 @@ callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data)
}
#else
pthread_cond_signal(&async_cb_cond);
+ pthread_mutex_unlock(&async_cb_mutex);
#endif
/* Wait for the thread executing the ruby callback to signal it is done */