mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
merge revision(s) 64589,64593: [Backport #15041]
cont.c: set th->root_fiber to current fiber at fork Otherwise, th->root_fiber can point to an invalid Fiber, because Fibers do not live across fork. So consider whatever Fiber is running the root fiber. [ruby-core:88723] [Bug #15041] cont.c (rb_fiber_atfork): th->root_fiber may not exist Otherwise, bootstraptest/test_fork.rb fails with -DVM_CHECK_MODE=2 [Bug #15041] Fixes: r64589 "cont.c: set th->root_fiber to current fiber at fork" git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@66818 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
06c9877346
commit
b9f11b128f
4 changed files with 24 additions and 4 deletions
14
cont.c
14
cont.c
|
@ -1932,6 +1932,20 @@ fiber_to_s(VALUE fibval)
|
|||
return rb_block_to_s(fibval, &proc->block, status_info);
|
||||
}
|
||||
|
||||
#ifdef HAVE_WORKING_FORK
|
||||
void
|
||||
rb_fiber_atfork(rb_thread_t *th)
|
||||
{
|
||||
if (th->root_fiber) {
|
||||
if (&th->root_fiber->cont.saved_ec != th->ec) {
|
||||
th->root_fiber = th->ec->fiber_ptr;
|
||||
th->root_fiber->cont.type = ROOT_FIBER_CONTEXT;
|
||||
}
|
||||
th->root_fiber->prev = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Document-class: FiberError
|
||||
*
|
||||
|
|
|
@ -269,7 +269,11 @@ class TestFiber < Test::Unit::TestCase
|
|||
end
|
||||
bug5700 = '[ruby-core:41456]'
|
||||
assert_nothing_raised(bug5700) do
|
||||
Fiber.new{ pid = fork {} }.resume
|
||||
Fiber.new do
|
||||
pid = fork do
|
||||
Fiber.new {}.transfer
|
||||
end
|
||||
end.resume
|
||||
end
|
||||
pid, status = Process.waitpid2(pid)
|
||||
assert_equal(0, status.exitstatus, bug5700)
|
||||
|
|
2
thread.c
2
thread.c
|
@ -4231,6 +4231,7 @@ terminate_atfork_i(rb_thread_t *th, const rb_thread_t *current_th)
|
|||
}
|
||||
}
|
||||
|
||||
void rb_fiber_atfork(rb_thread_t *);
|
||||
void
|
||||
rb_thread_atfork(void)
|
||||
{
|
||||
|
@ -4238,6 +4239,7 @@ rb_thread_atfork(void)
|
|||
rb_thread_atfork_internal(th, terminate_atfork_i);
|
||||
th->join_list = NULL;
|
||||
rb_mutex_cleanup_keeping_mutexes(th);
|
||||
rb_fiber_atfork(th);
|
||||
|
||||
/* We don't want reproduce CVE-2003-0900. */
|
||||
rb_reset_random_seed();
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#define RUBY_VERSION "2.5.4"
|
||||
#define RUBY_RELEASE_DATE "2019-01-11"
|
||||
#define RUBY_PATCHLEVEL 128
|
||||
#define RUBY_RELEASE_DATE "2019-01-14"
|
||||
#define RUBY_PATCHLEVEL 129
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2019
|
||||
#define RUBY_RELEASE_MONTH 1
|
||||
#define RUBY_RELEASE_DAY 11
|
||||
#define RUBY_RELEASE_DAY 14
|
||||
|
||||
#include "ruby/version.h"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue