From 0af3bbae866ae5ff10372f4c9960eedd278e30b0 Mon Sep 17 00:00:00 2001 From: Wayne Meissner Date: Tue, 23 Apr 2013 19:45:56 +1000 Subject: Check for HAVE_RB_THREAD_CALL_WITH_GVL --- ext/ffi_c/Function.c | 5 +++-- 1 file 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 */ -- cgit v1.2.1