[#45910] [ruby-trunk - Bug #6694][Open] Thread.new without block. — "ko1 (Koichi Sasada)" <redmine@...>

24 messages 2012/07/04

[#45913] [ruby-trunk - Bug #6698][Open] MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている — "imkira (Mario Freitas)" <imkira@...>

10 messages 2012/07/04

[#45933] [ruby-trunk - Bug #6716][Open] FileUtils.mv でリンク先がないシンボリックリンクファイルを指定すると ENOENT エラーになる — "tommy (Masahiro Tomita)" <tommy@...>

8 messages 2012/07/10

[#45976] [ruby-trunk - Bug #6756][Open] FileUtils.rm_rf がアクセス権のない空ディレクトリを削除しない — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>

9 messages 2012/07/20

[#46012] [ruby-trunk - Feature #6812][Open] Refactor gc.c — "authorNari (Narihiro Nakamura)" <authorNari@...>

13 messages 2012/07/30

[ruby-dev:45900] Re: Question: Thread#kill doesn't throw Exception

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2012-07-03 02:30:01 UTC
List: ruby-dev #45900
2012/7/2 Yusuke Endoh <mame@tsg.ne.jp>:
> 遠藤です。
>
> 2012/06/26 SASADA Koichi <ko1@atdot.net>:
>> (2012/06/26 4:51), KOSAKI Motohiro wrote:
>>> 例外だと握りつぶせますけど、そこで kill
>>> したつもりのスレッドが生き残ってしまって誰が嬉しいんだっけという話だと思います。個人的には例外にしてしまうとたぶん壊れるコードが出てくるので変えたくないなあ。
>>>
>>  そうですよね.1.8 もそうだし,ここは変えないということで.
>
>
> その特殊な Object の意図はおそらく「握りつぶされたくない」だと
> 思うのですが、しかし実際には ensure を使えば握りつぶせます。
>
>
>   th = Thread.new do
>     begin
>       begin
>         sleep 1
>       ensure
>         p $!
>         raise
>       end
>     rescue
>       retry
>     end
>   end
>   sleep 0.5
>   th.kill
>
>   $ ruby t.rb
>   nil
>   nil
>   nil
>   ... (繰り返す、^C で止められない)
>
>
> かといって、この挙動を変えるべきではないと思います。
> ensure が実行されないとリソースのリークやデータの欠損が発生
> しかねないと思うので。

素晴らしい洞察ですね。しかしこの挙動は実装をしらないと絶対想像つかないはずで、
Thread.kill のケースで retryが動いてしまっているのはバグではないでしょうか

# これを許すぐらいならThreadKilledException に賛成したくなる

In This Thread

Prev Next