merge revision(s) a7ff264477: [Backport #20393]

Don't clear pending interrupts in the parent process. (#10365)
This commit is contained in:
Takashi Kokubun 2024-05-29 11:46:33 -07:00
parent 541fc816fc
commit 6e46a363a8
4 changed files with 23 additions and 2 deletions

View file

@ -1682,7 +1682,6 @@ before_fork_ruby(void)
static void
after_fork_ruby(rb_pid_t pid)
{
rb_threadptr_pending_interrupt_clear(GET_THREAD());
if (pid == 0) {
// child
clear_pid_cache();

View file

@ -2783,4 +2783,25 @@ EOS
assert_operator(GC.stat(:total_freed_pages), :>, 0)
end;
end
def test_handle_interrupt_with_fork
Thread.handle_interrupt(RuntimeError => :never) do
Thread.current.raise(RuntimeError, "Queued error")
assert_predicate Thread, :pending_interrupt?
pid = Process.fork do
if Thread.pending_interrupt?
exit 1
end
end
_, status = Process.waitpid2(pid)
assert_predicate status, :success?
assert_predicate Thread, :pending_interrupt?
end
rescue RuntimeError
# Ignore.
end if defined?(fork)
end

View file

@ -4701,6 +4701,7 @@ void
rb_thread_atfork(void)
{
rb_thread_t *th = GET_THREAD();
rb_threadptr_pending_interrupt_clear(th);
rb_thread_atfork_internal(th, terminate_atfork_i);
th->join_list = NULL;
rb_fiber_atfork(th);

View file

@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 1
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
#define RUBY_PATCHLEVEL 65
#define RUBY_PATCHLEVEL 66
#include "ruby/version.h"
#include "ruby/internal/abi.h"