[#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:45892] Re: Question: Thread#kill doesn't throw Exception

From: Yusuke Endoh <mame@...>
Date: 2012-07-02 11:01:20 UTC
List: ruby-dev #45892
遠藤です。

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 が実行されないとリソースのリークやデータの欠損が発生
しかねないと思うので。

-- 
Yusuke Endoh <mame@tsg.ne.jp>

In This Thread