summaryrefslogtreecommitdiff
path: root/thread_pthread.h
diff options
context:
space:
mode:
authorJun Aruga <jaruga@redhat.com>2025-09-03 12:03:14 +0100
committerJun Aruga <junaruga@users.noreply.github.com>2025-09-04 15:55:27 +0100
commit73854a4b65fcea8e409440b88d014d8fb18bbc68 (patch)
tree76897d973aca9c36d75205c08ecc80889a836c59 /thread_pthread.h
parent665e503cea8a6815af28c60f6d8c359004c2e994 (diff)
Use no-inline version rb_current_ec on ppc64le
This commit fixes the failures in bootstraptest/test_ractor.rb reported on the issue ticket <https://bugs.ruby-lang.org/issues/21534>. TLS (Thread-Local Storage) may not be accessed across .so on ppc64le too. I am not sure about that. The comment "// TLS can not be accessed across .so on ..." in this commit comes from the following commit. https://github.com/ruby/ruby/commit/319afed20fba8f9b44611d16e4930260f7b56b86#diff-408391c43b2372cfe1fefb3e1c2531df0184ed711f46d229b08964ec9e8fa8c7R118 > // on Darwin, TLS can not be accessed across .so` This failures only happened when configuring with cppflags=-DRUBY_DEBUG and -O3 on ppc64le. The reproducing steps were below. ``` $ ./autogen.sh $ ./configure -C --disable-install-doc cppflags=-DRUBY_DEBUG $ make -j4 $ make btest BTESTS=bootstraptest/test_ractor.rb ... FAIL 2/147 tests failed make: *** [uncommon.mk:913: yes-btest] Error 1 ``` The steps with a reproducing script based on the `bootstraptest/test_ractor.rb` were below. ``` $ cat test_ractor_1.rb counts = [] counts << Ractor.count p counts.inspect ractors = (1..2).map { Ractor.new { Ractor.receive } } counts << Ractor.count p counts.inspect ractors[0].send('End 0').join sleep 0.1 until ractors[0].inspect =~ /terminated/ counts << Ractor.count p counts.inspect ractors[1].send('End 1').join sleep 0.1 until ractors[1].inspect =~ /terminated/ counts << Ractor.count p counts.inspect $ make run TESTRUN_SCRIPT=test_ractor_1.rb ... vm_core.h:2017: Assertion Failed: rb_current_execution_context:ec == rb_current_ec_noinline() ... ``` The assertion failure happened at the following line. https://github.com/ruby/ruby/blob/f3206cc79bec2fd852e81ec56de59f0a67ab32b7/vm_core.h#L2017 This fix is similar with the following commit for the arm64. https://github.com/ruby/ruby/commit/f7059af50a31a4d27a04ace0beadb60616f3f971 Fixes [Bug #21534]
Diffstat (limited to 'thread_pthread.h')
-rw-r--r--thread_pthread.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/thread_pthread.h b/thread_pthread.h
index 22e5f3652b..20a3876759 100644
--- a/thread_pthread.h
+++ b/thread_pthread.h
@@ -133,8 +133,8 @@ struct rb_thread_sched {
#ifdef RB_THREAD_LOCAL_SPECIFIER
NOINLINE(void rb_current_ec_set(struct rb_execution_context_struct *));
- # if defined(__arm64__) || defined(__aarch64__)
- // on Arm64, TLS can not be accessed across .so
+ # if defined(__arm64__) || defined(__aarch64__) || defined(__powerpc64__)
+ // TLS can not be accessed across .so on arm64 and perhaps ppc64le too.
NOINLINE(struct rb_execution_context_struct *rb_current_ec(void));
# else
RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec;