https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2022-01-19T14:08:49Z
Ruby Issue Tracking System
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=96053
2022-01-19T14:08:49Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Backport</strong> changed from <i>2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED</i></li></ul>
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=96054
2022-01-19T14:10:08Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>Applied in changeset <a class="changeset" title="`rb_fiber_terminate` must not return [Bug #18497] In a forked process from a fiber, the fiber be..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/d650b17686d49c2ce8e6a87039861154e93d4621">git|d650b17686d49c2ce8e6a87039861154e93d4621</a>.</p>
<hr>
<p><code>rb_fiber_terminate</code> must not return [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Fiber内でProcess.daemonをするとSegmentation faultが起こる (Closed)" href="https://bugs.ruby-lang.org/issues/18497">#18497</a>]</p>
<p>In a forked process from a fiber, the fiber becomes the only<br>
fiber, <code>fiber_switch</code> does nothing as there is no other fibers,<br>
<code>rb_fiber_terminate</code> does not terminate the fiber. In that case,<br>
reaches the end of <code>fiber_entry</code> finaly, which is declared as<br>
"COROUTINE" and should never return.</p>
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=96055
2022-01-19T14:34:24Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p>In 2.7 or earlier, <a class="changeset" title="relax Fiber#transfer's restriction Using Fiber#transfer with Fiber#resume for a same Fiber is li..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/bf3b2a43741e4f72be21bc6acf24d37e7fcff61c">bf3b2a43741e</a> or the following patch is also needed.</p>
<pre><code class="diff syntaxhl" data-language="diff"><span class="gh">diff --git a/cont.c b/cont.c
index 7f971a9e9d5..50403b8258d 100644
</span><span class="gd">--- a/cont.c
</span><span class="gi">+++ b/cont.c
</span><span class="p">@@ -1930,7 +1930,7 @@</span> fiber_current(void)
}
static inline rb_fiber_t*
<span class="gd">-return_fiber(void)
</span><span class="gi">+return_fiber(bool terminate)
</span> {
rb_fiber_t *fiber = fiber_current();
rb_fiber_t *prev = fiber->prev;
<span class="p">@@ -1941,7 +1941,7 @@</span> return_fiber(void)
VM_ASSERT(root_fiber != NULL);
<span class="gd">- if (root_fiber == fiber) {
</span><span class="gi">+ if (!terminate && root_fiber == fiber) {
</span> rb_raise(rb_eFiberError, "can't yield from root fiber");
}
return root_fiber;
<span class="p">@@ -2087,7 +2087,7 @@</span> rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt)
fiber->cont.machine.stack = NULL;
fiber->cont.machine.stack_size = 0;
<span class="gd">- next_fiber = return_fiber();
</span><span class="gi">+ next_fiber = return_fiber(true);
</span> if (need_interrupt) RUBY_VM_SET_INTERRUPT(&next_fiber->cont.saved_ec);
fiber_switch(next_fiber, 1, &value, 0, RB_NO_KEYWORDS);
}
<span class="p">@@ -2121,13 +2121,13 @@</span> rb_fiber_resume(VALUE fiber_value, int argc, const VALUE *argv)
VALUE
rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat)
{
<span class="gd">- return fiber_switch(return_fiber(), argc, argv, 0, kw_splat);
</span><span class="gi">+ return fiber_switch(return_fiber(false), argc, argv, 0, kw_splat);
</span> }
VALUE
rb_fiber_yield(int argc, const VALUE *argv)
{
<span class="gd">- return fiber_switch(return_fiber(), argc, argv, 0, RB_NO_KEYWORDS);
</span><span class="gi">+ return fiber_switch(return_fiber(false), argc, argv, 0, RB_NO_KEYWORDS);
</span> }
void
</code></pre>
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=96291
2022-01-31T10:22:36Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: DONE</i></li></ul><p>ruby_3_1 1c426ddb25e2ccb169720e4f9894605596fe594d merged revision(s) 5c7af72304d0ad33cd3f21b24a4bc44e8acd5b2c,d650b17686d49c2ce8e6a87039861154e93d4621.</p>
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=96808
2022-03-13T03:12:43Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: DONE</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE, 3.1: DONE</i></li></ul><p>ruby_3_0 6a8c166498b856ca1dcb53248f0be5fc138f1af3 merged revision(s) 5c7af72304d0ad33cd3f21b24a4bc44e8acd5b2c,d650b17686d49c2ce8e6a87039861154e93d4621.</p>
Ruby master - Bug #18497: Fiber内でProcess.daemonをするとSegmentation faultが起こる
https://bugs.ruby-lang.org/issues/18497?journal_id=97173
2022-04-07T14:27:12Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE, 3.1: DONE</i> to <i>2.6: WONTFIX, 2.7: DONE, 3.0: DONE, 3.1: DONE</i></li></ul>