[Ruby 1.9-Bug#4109][Open] test timeout.rbが失敗する

Bug #4109: test_timeout.rbが失敗する
http://redmine.ruby-lang.org/issues/show/4109

起票者: Kouhei Y.
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.9.2p53 (2010-11-24 revision 29921) [x86_64-linux]

trunkでは直っているのですが、ruby_1_9_2ブランチの先頭で問題が再現し、
同様の報告が見つからなかったために念のため報告します。

CentOS release 5.5で、test/test_timeout.rbが失敗することがあります。

失敗例

$ /opt/ruby19/bin/ruby -v test/test_timeout.rb
ruby 1.9.2p53 (2010-11-24 revision 29921) [x86_64-linux]
Loaded suite test/test_timeout
Started
…F
Finished in 5.229315 seconds.

1) Failure:

test_timeout(TestTimeout) [test/test_timeout.rb:19]:
[ruby-dev:38319].
Exception raised:
<#<Timeout::Error: execution expired>>.

3 tests, 3 assertions, 1 failures, 0 errors, 0 skips

Test run options: --seed 21964

常に失敗するわけではなく、たまに成功することもあります。

なお、テストの実行時間には実行のたびに大きくばらつきがあり、
5分以上経っても終了しないこともあります。
(C-cで終了させてしまったので、必ず終了するのかは不明です)

trunkでは、r29955までは問題が再現し、r29956で正常にテストが通るようになります。

また、Debian lennyではこの問題は発生しません。

チケット #4109 が更新されました。 (by Yui NARUSE)

ステータス OpenからAssignedに変更
担当者 Yuki S.にセット

r29956で直ったようですが、ちょっとbug fixにするには大きいかなぁ。

なお、この問題はFreeBSD8でも見覚えがありますね

チケット #4109 が更新されました。 (by Yuki S.)

優先度 NormalからLowに変更

そうですね。ちょっとバグフィックスには大きいです。当面pendingとさせてください。

チケット #4109 が更新されました。 (by Kouhei Y.)

当初の報告では Debian lenny (Core i3 530) では発生しないとしていましたが、
今改めて調べたところ、この環境でも問題が発生することがわかったので報告します。

ひとまずpendingとなりそうですので、
個人的にパッチを当てることを検討したいと思います。

チケット #4109 が更新されました。 (by Motohiro KOSAKI)

私の見立てが正しければ r29956 は副作用で(他と合わせ技で)Bug#4121
を招いてしまっているのでtrunkが落ち着くまでbackportをpendingしてほしいです。

簡単に言うとr29956でGVL
fairnessのために他スレッドの待ち状態を意識するようになったいて、もし仮にfork時等スレッドが消えたときにGVLのステートを正しく再設定するのを忘れるとdeadlockを招くリスクがあるのですが、trunkでは本当に漏れている場所がありました。とかそういう話です。

次のパッチリリースは半年後なのでわざわざ書かなくても自然とそうなる気もしますが。