mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
43d3f813bc
commit
ac543abe91
3 changed files with 19 additions and 1 deletions
12
cont.c
12
cont.c
|
@ -1977,6 +1977,18 @@ 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->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
|
@ -4381,6 +4381,7 @@ terminate_atfork_i(rb_thread_t *th, const rb_thread_t *current_th)
|
|||
|
||||
/* mjit.c */
|
||||
void mjit_child_after_fork(void);
|
||||
void rb_fiber_atfork(rb_thread_t *);
|
||||
void
|
||||
rb_thread_atfork(void)
|
||||
{
|
||||
|
@ -4388,6 +4389,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();
|
||||
|
|
Loading…
Reference in a new issue