Skip to content

[pull] master from ruby:master - #1397

Merged
pull[bot] merged 11 commits into
turkdevops:masterfrom
ruby:master
Sep 11, 2026
Merged

[pull] master from ruby:master#1397
pull[bot] merged 11 commits into
turkdevops:masterfrom
ruby:master

Conversation

@pull

@pull pull Bot commented Sep 11, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

hsbt and others added 11 commits September 11, 2026 10:03
cmd.exe does not understand the POSIX `VAR=value command` form and
tried to run SYNTAX_SUGGEST_DEBUG as a command.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Compaction has been suppressed on s390x since 2021 because the tests
randomly stalled past the 1800s output timeout. That no longer happens:
on s390x.rubyci.org these all pass individually, inside a full serial
test-all, and across a 100-run soak under CPU saturation, with GC.compact
and GC.verify_compaction_references both behaving correctly.

#5077

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It passed 70 out of 70 runs on s390x.rubyci.org across an idle machine, a
saturated one, and 2x CPU oversubscription. Its pair,
test_timeout_shorter_than_global, keeps the guard: that one still
reproduces the original failure, but only under oversubscription, so the
sensitivity is scheduling delay rather than anything about s390x.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It passed 40 out of 40 runs on s390x.rubyci.org, 30 of them under CPU
saturation. The guard came from GitHub Actions failures in 2025, and the
test has since gained a 30 second timeout for the new pool layout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
None of these has a caller, a declaration in any header, or a place in
libruby's dynamic symbol table, so an extension cannot reach them either.

* rb_vm_opt_newarray_pack: left over from cb9510f, which moved the
  instruction to the _buffer form.
* rb_autoload: a wrapper around rb_autoload_str, deprecated and dropped
  from intern.h in Ruby 2.3 [Feature #11664].
* rb_big_fdiv: a wrapper around rb_big_fdiv_double, unused since Bignum
  stopped defining #fdiv.
* rb_io_unbuffered: a wrapper around rb_io_synchronized, which is what it
  was renamed to before 1.8.0.
* rb_ractor_hooks: an accessor for cr->pub.hooks; only its sibling
  rb_ractor_targeted_hooks is used.
* rb_assert_sig: a leftover debugging aid.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The omit dates from when the assertion had a 30 second timeout and the
[Bug #21398] deadlock had just been fixed.  It is 90 seconds now, scaled
by ten on the macOS CI jobs, and the job itself takes about a second.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Turning the C level backtrace into file:line pairs walks the whole of
the binary's debug info, and that is nearly all of what a crash costs:
0.8s of CPU with the dSYM in place against 0.01s without it, on an idle
arm64 macOS host.  The default subprocess budget of 10 seconds is meant
for a child that does none of that work, and on a loaded CI host it ran
out, which is what these tests were omitted for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A subprocess that expires its timeout reports which assertion it was and
the output it did manage to produce.  Dropping that left nothing to go on
for the crash report timeouts on macOS CI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
macOS 26.1 and later deliver only every other ICMP port unreachable for
the same pair of endpoints, so the second attempt over a socket that has
already seen one waits out its whole timeout instead of failing at once.
Resolving against a nameserver with nothing listening took 50 seconds
there rather than returning immediately.

ruby/resolv@9d09be1ad0

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
class_allocate_complex_instance() allocates the object with an extended
shape and fills in as.extended only after allocating the fields object.
A GC during that allocation sees a shape that says "extended" and marks
whatever the reused slot left in as.extended:

  [BUG] try to mark T_NONE object (obj: out-of-heap:..., parent: ... T_OBJECT/(complex) ...)

Before 8695116 ("Get rid of ROBJECT_HEAP flag") the mark path keyed
off the ROBJECT_HEAP flag, which was set together with as.extended, so
the window took the embedded path and read nothing.  The shape is now
set at allocation, which makes the window live.

Reproduces with GC.stress on a class whose instances start with a
complex shape, e.g. bootstraptest/test_yjit.rb under `-s`.  Add a
bootstraptest that enables GC.stress itself so a regular btest run
covers it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
eb38fb6 added it as a thread-safe counterpart to postponed_job, for
MJIT to enqueue work from its own thread [Bug #15316].  MJIT and RJIT are
gone and nothing enqueues anything any more: rb_workqueue_register() has
no caller, no declaration in any header, and hidden visibility, so an
extension cannot reach it either.  What is left is rb_postponed_job_flush()
taking workqueue_lock on every call to steal a list that is always empty.

rb_postponed_job_flush() no longer needs the VM: the preregistered job
table it drains is a file-static.  Drop the argument.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Sep 11, 2026
@pull pull Bot added the ⤵️ pull label Sep 11, 2026
@pull
pull Bot merged commit 64b7a56 into turkdevops:master Sep 11, 2026
1 of 3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants