diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2023-09-08 20:44:46 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-08 20:44:46 +1200 |
commit | be21a056d229652ae5cf6926e96c1517aa43453f (patch) | |
tree | 4ed30d702d2aac426501a64825aaff4ab2e82efd /thread_sync.c | |
parent | 15fd897629cc8743a468dfae55c06f4d70150f1e (diff) | |
download | ruby-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.c | 32 |
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); |