From 25a332f5cf295e4b72814c39d87b4b3e2967dd68 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 25 Oct 2020 22:06:44 +0900 Subject: [PATCH] Fix compilation on MSVC * cast scalar value instead of function * use `rb_pid_t` for the portability --- spec/ruby/optional/capi/ext/thread_spec.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/spec/ruby/optional/capi/ext/thread_spec.c b/spec/ruby/optional/capi/ext/thread_spec.c index 845c022fa1..11379bbf2f 100644 --- a/spec/ruby/optional/capi/ext/thread_spec.c +++ b/spec/ruby/optional/capi/ext/thread_spec.c @@ -73,19 +73,14 @@ static void* blocking_gvl_func_for_udf_io(void *data) { } } -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-function-type" -#endif - -static VALUE thread_spec_rb_thread_call_without_gvl_native_function(VALUE self) { - pid_t ret = (pid_t) (long) rb_thread_call_without_gvl((void *(*)(void *)) getpid, 0, RUBY_UBF_IO, 0); - return LONG2FIX(ret); +static void* ubf_pid(void *_) { + return (void *) (SIGNED_VALUE) getpid(); } -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif +static VALUE thread_spec_rb_thread_call_without_gvl_native_function(VALUE self) { + rb_pid_t ret = (rb_pid_t) (SIGNED_VALUE) rb_thread_call_without_gvl(ubf_pid, 0, RUBY_UBF_IO, 0); + return LONG2FIX(ret); +} /* Returns true if the thread is interrupted. */ static VALUE thread_spec_rb_thread_call_without_gvl_with_ubf_io(VALUE self) {