https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2010-05-27T20:06:07Z
Ruby Issue Tracking System
Ruby master - Bug #3354: エンコードを指定してread中にCtrl-Cで落ちる
https://bugs.ruby-lang.org/issues/3354?journal_id=11283
2010-05-27T20:06:07Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>=begin<br>
直接的な原因はGVLのデッドロックなんだけど</p>
<p>static int<br>
garbage_collect_with_gvl(rb_objspace_t *objspace)<br>
{<br>
if (dont_gc) return TRUE;<br>
if (ruby_thread_has_gvl_p()) {<br>
return garbage_collect(objspace);<br>
}<br>
else {<br>
if (ruby_native_thread_p()) {<br>
return (int)(VALUE)rb_thread_call_with_gvl(gc_with_gvl, (void <em>)objspace);<br>
}<br>
else {<br>
/</em> no ruby thread */<br>
fprintf(stderr, "[FATAL] failed to allocate memory\n");<br>
exit(EXIT_FAILURE);<br>
}<br>
}<br>
}</p>
<p>のようにGVLをもってないことを確認してから、GVLを取りに行っているのに<br>
pthread_mutex_lock が EDEADLK を返したので大混乱。と。<br>
そういうバグなわけだな(たぶん)</p>
<p>=end</p>
Ruby master - Bug #3354: エンコードを指定してread中にCtrl-Cで落ちる
https://bugs.ruby-lang.org/issues/3354?journal_id=11284
2010-05-27T20:25:36Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>=begin<br>
ここかな?</p>
<p>#define blocking_region_begin(th, region, func, arg) <br>
do { <br>
(region)->prev_status = (th)->status; <br>
(th)->blocking_region_buffer = (region); \ ☆ ここでruby_thread_has_gvl_p()が偽を返すようになる<br>
set_unblock_function((th), (func), (arg), &(region)->oldubf); \ ★ ここでシグナルをチェックしてしまうのでSIGINTが見つかると rb_interrupt() が呼ばれてしまう<br>
(th)->status = THREAD_STOPPED; <br>
thread_debug("enter blocking region (%p)\n", (void *)(th)); <br>
RB_GC_SAVE_MACHINE_CONTEXT(th); <br>
native_mutex_unlock(&(th)->vm->global_vm_lock); \ ☆ ここで実際のGVLのアンロック<br>
} while (0)</p>
<p>=end</p>
Ruby master - Bug #3354: エンコードを指定してread中にCtrl-Cで落ちる
https://bugs.ruby-lang.org/issues/3354?journal_id=11285
2010-05-27T20:49:42Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>File</strong> <a href="/attachments/1011">bug-3354.patch</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/1011/bug-3354.patch">bug-3354.patch</a> added</li></ul><p>=begin<br>
親切な人がレビューしてくれないかなー(チラッチラッ<br>
と修正パッチ(案)を添付します<br>
=end</p>
Ruby master - Bug #3354: エンコードを指定してread中にCtrl-Cで落ちる
https://bugs.ruby-lang.org/issues/3354?journal_id=11316
2010-05-28T21:37:05Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>=begin<br>
This issue was solved with changeset r28055.<br>
Makoto, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<p>=end</p>