https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2009-01-04T00:58:18Z
Ruby Issue Tracking System
Ruby master - Bug #968: trap may fail to handle signals
https://bugs.ruby-lang.org/issues/968?journal_id=2516
2009-01-04T00:58:18Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>=begin<br>
遠藤です。</p>
<p>補足です。</p>
<p>シグナルが連続して送られたとき、その回数だけシグナルハンドラが呼ばれる<br>
という保障は OS レベルで存在しないと聞きました。<br>
ただ今の Ruby は、せっかくシグナルハンドラが呼ばれた場合でも trap を<br>
呼び損ねる場合があります。</p>
<p>また、種類が異なるシグナルでも trap を呼び損ねる場合があるのですが、<br>
Unix ではこれすら保障されないのでしょうか。</p>
<p>$ ./ruby -e '<br>
n = 0<br>
trap(:USR1) { n += 1 }<br>
trap(:USR2) { n += 1 }</p>
<p>pid = $$<br>
fork do<br>
sleep 0.5<br>
p "send start"<br>
Process.kill(:USR1, pid)<br>
Process.kill(:USR2, pid)<br>
p "send end"<br>
end</p>
<p>p "calc start"<br>
1000**100000 # wait<br>
p "calc end"</p>
<p>p n<br>
'<br>
"calc start"<br>
"send start"<br>
"send end"<br>
"calc end"<br>
1</p>
<p>現在 test-all の TestSignal#test_exit_action が結構な確率で失敗しますが、<br>
これも同じ問題のようで、前述のパッチを当てると通るようになります。<br>
私の環境で高確率で 0F0E になるので、うれしいです (Rinda のテストが<br>
稀に失敗しますが) 。</p>
<p>というわけで、積極的な反対がなければとりあえずコミットしてしまおう<br>
と思います。</p>
<p>--<br>
Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
<p>=end</p>
Ruby master - Bug #968: trap may fail to handle signals
https://bugs.ruby-lang.org/issues/968?journal_id=2644
2009-01-16T02:37:07Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<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>
Applied in changeset r21582.<br>
=end</p>