From: shibata.hiroshi@... Date: 2014-01-30T06:16:30+00:00 Subject: [ruby-dev:47929] [ruby-trunk - Bug #5368] ensure節でsleepするようなThreadがあるとインタプリタが終了しない Issue #5368 has been updated by Hiroshi SHIBATA. Target version changed from 2.1.0 to current: 2.2.0 ---------------------------------------- Bug #5368: ensure節でsleepするようなThreadがあるとインタプリタが終了しない https://bugs.ruby-lang.org/issues/5368#change-44739 * Author: Masaki Matsushita * Status: Assigned * Priority: Normal * Assignee: Motohiro KOSAKI * Category: core * Target version: current: 2.2.0 * ruby -v: - * Backport: ---------------------------------------- =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 ---Files-------------------------------- patch.diff (795 Bytes) -- http://bugs.ruby-lang.org/