mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
merge revision(s) a7ff264477
: [Backport #20393]
Don't clear pending interrupts in the parent process. (#10365)
This commit is contained in:
parent
541fc816fc
commit
6e46a363a8
4 changed files with 23 additions and 2 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
1
thread.c
1
thread.c
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue