From bfc5b8305d6a78b8cd011e89538dd7961d88dcff Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Tue, 25 Mar 2025 22:20:59 +0100 Subject: [PATCH] [ruby/etc] Etc.sysconfdir does not work in a Ractor * Because it uses RbConfig::CONFIG. * See https://github.com/ruby/ruby/actions/runs/14069312270/job/39399502142#step:12:947 https://github.com/ruby/etc/commit/12dbe03b6a --- ext/etc/etc.c | 4 +++- test/etc/test_etc.rb | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ext/etc/etc.c b/ext/etc/etc.c index 82e4af87fe..157c6772ec 100644 --- a/ext/etc/etc.c +++ b/ext/etc/etc.c @@ -1172,7 +1172,6 @@ Init_etc(void) #ifdef HAVE_RB_EXT_RACTOR_SAFE RB_EXT_RACTOR_SAFE(true); #endif - rb_define_module_function(mEtc, "sysconfdir", etc_sysconfdir, 0); rb_define_module_function(mEtc, "systmpdir", etc_systmpdir, 0); rb_define_module_function(mEtc, "uname", etc_uname, 0); rb_define_module_function(mEtc, "sysconf", etc_sysconf, 1); @@ -1200,6 +1199,9 @@ Init_etc(void) rb_define_module_function(mEtc, "endgrent", etc_endgrent, 0); rb_define_module_function(mEtc, "getgrent", etc_getgrent, 0); + /* Uses RbConfig::CONFIG so does not work in a Ractor */ + rb_define_module_function(mEtc, "sysconfdir", etc_sysconfdir, 0); + sPasswd = rb_struct_define_under(mEtc, "Passwd", "name", #ifdef HAVE_STRUCT_PASSWD_PW_PASSWD diff --git a/test/etc/test_etc.rb b/test/etc/test_etc.rb index 9d0d0b4909..9a488b6709 100644 --- a/test/etc/test_etc.rb +++ b/test/etc/test_etc.rb @@ -179,7 +179,6 @@ class TestEtc < Test::Unit::TestCase 20.times.map do Ractor.new do 1000.times do - raise unless String === Etc.sysconfdir raise unless String === Etc.systmpdir raise unless Hash === Etc.uname if defined?(Etc::SC_CLK_TCK)