From: Masaki Matsushita Date: 2011-09-26T13:51:01+09:00 Subject: [ruby-dev:44546] [Ruby 1.9 - Bug #5368][Open] ensure節でsleepするようなThreadがあるとインタプリタが終了しない Issue #5368 has been reported by Masaki Matsushita. ---------------------------------------- Bug #5368: ensure節でsleepするようなThreadがあるとインタプリタが終了しない http://redmine.ruby-lang.org/issues/5368 Author: Masaki Matsushita Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.x ruby -v: ruby 1.9.4dev (2011-09-26 trunk 33338) [x86_64-linux] =begin 次のコードを実行するとCPU使用率が跳ね上がった状態になりインタプリタが終了しません。 Thread.new do begin sleep ensure sleep end end 現在のrb_thread_terminate_allでは最初に1回だけ生きているスレッドに対してterminate_iを実行していますが、ensure節でsleepするようなThreadがあると、そのThreadは寝たままになってしまいwhile(!rb_thread_alone())が無限ループになってしまいます。 while(!rb_thread_alone())の毎回のループでカレントスレッドがメインスレッドであった場合に、生きているスレッドに対してterminate_iを実行するようなpatchを書いたところ、このバグは再現しなくなりました。 patchを添付します。patchの適用後もtest-allをパスします。 =end -- http://redmine.ruby-lang.org