From 867b36082111f564f6e55f63cd21fa0c94df2d20 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 23 Aug 2022 09:00:30 +0000 Subject: support --enabled-shared builds of Ruby Most GNU/Linux distros build Ruby with --enable-shared, so it makes sense to support it properly even if it's not the default favored by ruby-core. __attribute__((weak)) on a local function is not weak enough for the shared library, so we add the extra check for the function's existence to have_ec_p(), instead. Tested with ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux-gnu] on Debian 11 (bullseye) as well as default builds w/o --enable-shared. Note: FreeBSD 12.3 appears broken with mwrap and I no longer have older FreeBSD systems handy. --- ext/mwrap/mwrap.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'ext/mwrap/mwrap.c') diff --git a/ext/mwrap/mwrap.c b/ext/mwrap/mwrap.c index 85b847b..9d90298 100644 --- a/ext/mwrap/mwrap.c +++ b/ext/mwrap/mwrap.c @@ -32,7 +32,6 @@ static ID id_uminus; const char *rb_source_location_cstr(int *line); /* requires 2.6.0dev */ -extern int __attribute__((weak)) ruby_thread_has_gvl_p(void); #ifdef HAVE_RUBY_RACTOR_H /* Ruby 3.0+ */ extern MWRAP_TSD void * __attribute__((weak)) ruby_current_ec; @@ -45,6 +44,7 @@ extern size_t __attribute__((weak)) rb_gc_count(void); extern VALUE __attribute__((weak)) rb_cObject; extern VALUE __attribute__((weak)) rb_eTypeError; extern VALUE __attribute__((weak)) rb_yield(VALUE); +int __attribute__((weak)) ruby_thread_has_gvl_p(void); static size_t total_bytes_inc, total_bytes_dec; @@ -64,11 +64,6 @@ enum { #define IS_HEAP_PAGE_BODY ((struct src_loc *)-1) -int __attribute__((weak)) ruby_thread_has_gvl_p(void) -{ - return 0; -} - #ifdef __FreeBSD__ void *__malloc(size_t); void __free(void *); @@ -238,8 +233,8 @@ static char *int2str(int num, char *dst, size_t * size) */ static int has_ec_p(void) { - return (ruby_thread_has_gvl_p() && ruby_current_vm_ptr && - ruby_current_ec); + return ruby_thread_has_gvl_p && ruby_thread_has_gvl_p() && + ruby_current_vm_ptr && ruby_current_ec; } struct acc { -- cgit v1.2.3-24-ge0c7