From: KOSAKI Motohiro Date: 2011-09-29T21:14:19+09:00 Subject: [ruby-dev:44563] Re: [Ruby 1.9 - Bug #5368][Open] ensure節でsleepするようなThreadがあるとインタプリタが終了しない 2011年9月29日20:20 Nobuyoshi Nakada : > なかだです。 > > At Mon, 26 Sep 2011 23:52:19 +0900, > SASADA Koichi wrote in [ruby-dev:44552]: >> (2011/09/26 7:03), m_takao wrote: >>> これは「ensure節の実行中に止めるのはNG」ということですよね? >>> いまの実装 (rev.33339) では、ensure節の実行中であっても、terminateされたら >>> (外側にさらなるensure節がなければ) ふつうに終了するので、辻褄が合わない気がします。 >> >>  ご指摘の通り,「最初の1回だけは必ず ensure 中でも強制的に止めてしま >> う」という仕様になっていますね.現状では,ensure 中(後処理中)ではない >> ことを期待しています.ファイナライザ実行中でも,強制的にキャンセルされる >> ので,何か後処理をしている最中に止められるのは不可避です. > > ensureでsleepされたら止まるのは仕方がないにせよ、そこで割り込みを受けた > らやはり抜けるほうがいいのではないでしょうか。 現在のensure中の非同期例外の扱いは仕様バグであるという認識なので、こういう ワークアラウンドにはあまりいい印象を持ちません。 実用的にも問題があると思っていて、C-c を日常的に2−3回連打する癖のあるひとは いるので、そういう人からするとプロセス終了処理がちゃんと行われなくなるregression に見えるのではないでしょうか。