(2011/09/26 7:03), m_takao wrote:
> これは「ensure節の実行中に止めるのはNG」ということですよね?
> いまの実装 (rev.33339) では、ensure節の実行中であっても、terminateされたら
> (外側にさらなるensure節がなければ) ふつうに終了するので、辻褄が合わない気がします。

 ご指摘の通り,「最初の1回だけは必ず ensure 中でも強制的に止めてしま
う」という仕様になっていますね.現状では,ensure 中(後処理中)ではない
ことを期待しています.ファイナライザ実行中でも,強制的にキャンセルされる
ので,何か後処理をしている最中に止められるのは不可避です.

# 今まで文句が無かったというのは,確率的にこういうケースが起きづらい,
# ということでしょうかね.

 真面目にやるなら,すでに何度か提案がある,こういう割り込みを制御するた
めの仕組みを統一的に整備するってことになると思います.うーん,せめてファ
イナライザの処理は main thread のみで行うようにしたほうがいいんだろうか.

 もしくは,こういう処理を行うことがあるのなら,ちゃんと join してから死
にましょう,と開き直って,最初のご提案の通り,確実に殺す,というふうに振
るのかなぁ.それはそれで不便そうに思うのだけど.

 結論も出てませんが,現状はなんとなくうまく動くことが多い,改善するには
しんどそう,ということで,なんとなく現状の仕様になっている,ということか
と思います.

 もしうまい手があれば教えてください.

-- 
// SASADA Koichi at atdot dot net