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>
This commit is contained in:
parent
15fd897629
commit
be21a056d2
Notes:
git
2023-09-08 08:45:07 +00:00
Merged-By: ioquatix <samuel@codeotaku.com>
@ -82,12 +82,12 @@ env:
|
|||||||
- &ppc64le-linux
|
- &ppc64le-linux
|
||||||
name: ppc64le-linux
|
name: ppc64le-linux
|
||||||
arch: ppc64le
|
arch: ppc64le
|
||||||
<<: *gcc-10
|
compiler: gcc
|
||||||
|
|
||||||
- &s390x-linux
|
- &s390x-linux
|
||||||
name: s390x-linux
|
name: s390x-linux
|
||||||
arch: s390x
|
arch: s390x
|
||||||
<<: *gcc-10
|
compiler: gcc
|
||||||
|
|
||||||
- &arm32-linux
|
- &arm32-linux
|
||||||
name: arm32-linux
|
name: arm32-linux
|
||||||
|
@ -290,28 +290,6 @@ delete_from_waitq(VALUE value)
|
|||||||
return Qnil;
|
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
|
static VALUE
|
||||||
do_mutex_lock(VALUE self, int interruptible_p)
|
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);
|
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);
|
if (mutex->fiber == fiber) mutex_locked(th, self);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user