aboutsummaryrefslogtreecommitdiffstats
path: root/thread_sync.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2023-09-08 20:44:46 +1200
committerGitHub <noreply@github.com>2023-09-08 20:44:46 +1200
commitbe21a056d229652ae5cf6926e96c1517aa43453f (patch)
tree4ed30d702d2aac426501a64825aaff4ab2e82efd /thread_sync.c
parent15fd897629cc8743a468dfae55c06f4d70150f1e (diff)
downloadruby-be21a056d229652ae5cf6926e96c1517aa43453f.tar.gz
Try default `gcc` 9.4.0 to see if it exhibits the same compiler bugs. (#8394)
* Revert "Extract `do_mutex_lock_check_interrupts` to try and fix `ppc64le`. (#8393)" This reverts commit 5184b40dd4dc446660cd35c3e53896324e95b317. * .travis.yml: Try default gcc 9.4.0 instead of gcc-10 in ppc64le and s390x. Use gcc 9.4.0 instead of gcc-10 to avoid the current failures by a possible GCC 10 compiler bug in the Travis ppc64le and s390x cases. And it also aligns with RubyCI Ubuntu ppc64le and s390x where the default gcc is used. --------- Co-authored-by: Jun Aruga <jaruga@ruby-lang.org>
Diffstat (limited to 'thread_sync.c')
-rw-r--r--thread_sync.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/thread_sync.c b/thread_sync.c
index 63f0228d9d..85ebec4d8c 100644
--- a/thread_sync.c
+++ b/thread_sync.c
@@ -290,28 +290,6 @@ delete_from_waitq(VALUE value)
return Qnil;
}
-static void
-do_mutex_lock_check_interrupts(int interruptible_p, rb_fiber_t *fiber, rb_mutex_t *mutex, rb_thread_t *thread)
-{
- // We extracted this function because we suspect there can be a codegen bug
- // on ppc64le and moving this code to a separate function seems to fix the
- // problem, at least in my tests.
- if (interruptible_p) {
- /* release mutex before checking for interrupts...as interrupt checking
- * code might call rb_raise() */
- if (mutex->fiber == fiber) {
- mutex->fiber = 0;
- }
-
- RUBY_VM_CHECK_INTS_BLOCKING(thread->ec); /* may release mutex */
-
- if (!mutex->fiber) {
- mutex->fiber = fiber;
- }
- }
-}
-
-
static VALUE
do_mutex_lock(VALUE self, int interruptible_p)
{
@@ -400,7 +378,15 @@ do_mutex_lock(VALUE self, int interruptible_p)
rb_ractor_sleeper_threads_dec(th->ractor);
}
- do_mutex_lock_check_interrupts(interruptible_p, fiber, mutex, th);
+ if (interruptible_p) {
+ /* release mutex before checking for interrupts...as interrupt checking
+ * code might call rb_raise() */
+ if (mutex->fiber == fiber) mutex->fiber = 0;
+ RUBY_VM_CHECK_INTS_BLOCKING(th->ec); /* may release mutex */
+ if (!mutex->fiber) {
+ mutex->fiber = fiber;
+ }
+ }
}
if (mutex->fiber == fiber) mutex_locked(th, self);