https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2009-11-26T14:59:03Z
Ruby Issue Tracking System
Ruby master - Bug #2398: race condition of /#{ foo }/o
https://redmine.ruby-lang.org/issues/2398?journal_id=7001
2009-11-26T14:59:03Z
ujihisa (Tatsuhiro Ujihisa)
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>nobu (Nobuyoshi Nakada)</i></li></ul><p>=begin</p>
<p>=end</p>
Ruby master - Bug #2398: race condition of /#{ foo }/o
https://redmine.ruby-lang.org/issues/2398?journal_id=10571
2010-04-27T22:55:07Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Assignee</strong> changed from <i>nobu (Nobuyoshi Nakada)</i> to <i>mame (Yusuke Endoh)</i></li><li><strong>Target version</strong> set to <i>1.9.2</i></li><li><strong>ruby -v</strong> set to <i>-</i></li></ul><p>=begin<br>
遠藤です。</p>
<p>とりあえず、最初に once 区間に突入した (onceinlinecache を実行した)<br>
スレッドが once 区間を脱出する (setinlinecache を実行する) まで、<br>
2 番目以降に同じ区間に突入するスレッドをブロックするパッチを書きま<br>
した。</p>
<p>最初のスレッドが正常に出口に到達しなかった場合、2 番目以降に突入した<br>
スレッドたちは永久にブロックしてしまいますが、SEGV よりましですし、<br>
Ctrl+C で止めることもできるので、いいかなと思います。<br>
そもそもそういう状況になるようなプログラムに問題があると言えるかも<br>
しれません。</p>
<p>すぐにコミットしてしまいますが、反対があったら言ってください。</p>
<p>diff --git a/insns.def b/insns.def<br>
index 9541465..ba6f1d6 100644<br>
--- a/insns.def<br>
+++ b/insns.def<br>
@@ -1199,10 +1199,17 @@ onceinlinecache<br>
()<br>
(VALUE val)<br>
{</p>
<ul>
<li>retry:<br>
if (ic->ic_vmstat) {<br>
val = ic->ic_value.value;<br>
JUMP(dst);<br>
}</li>
<li>else if (ic->ic_value.value == Qundef)</li>
<li>{</li>
<li>
<pre><code> RUBY_VM_CHECK_INTS();
</code></pre>
</li>
<li>
<pre><code> rb_thread_schedule();
</code></pre>
</li>
<li>goto retry;</li>
<li>}<br>
else {<br>
/* none */<br>
ic->ic_value.value = Qundef;</li>
</ul>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a><br>
=end</p>
Ruby master - Bug #2398: race condition of /#{ foo }/o
https://redmine.ruby-lang.org/issues/2398?journal_id=10572
2010-04-27T23:07:05Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</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 r27515.<br>
Yusuke, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<p>=end</p>