Project

General

Profile

Actions

Bug #5368

closed

ensure節でsleepするようなThreadがあるとインタプリタが終了しない

Added by Glass_saga (Masaki Matsushita) about 13 years ago. Updated over 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
-
Backport:
[ruby-dev:44546]

Description

=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) patch.diff Glass_saga (Masaki Matsushita), 09/26/2011 01:51 PM

Related issues 2 (0 open2 closed)

Related to Ruby master - Feature #1952: cannot stop with Ctrl+CClosedko1 (Koichi Sasada)08/18/2009Actions
Related to Ruby master - Bug #7460: メインスレッド終了後のサブスレッド終了待ち処理においてデッドロック検知が動作していないClosedkosaki (Motohiro KOSAKI)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0