From: Nobuhiro IMAI Date: 2009-06-08T09:18:19+09:00 Subject: [ruby-dev:38580] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later ----Next_Part(Mon_Jun__8_09_15_50_2009_256)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit いまいです。 From: Yukihiro Matsumoto Date: Thu, 4 Jun 2009 18:21:02 +0900 > |ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな > |いような? > > |1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼 > |ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問 > |題では? > > なるほど。調べてみます。 > > ただ、プロセス終了時におけるファイナライザの信頼できる実行は > なかなか難しいので、将来的にはhistoryのセーブのような重要なタ > スクはファイナライザからではなく、at_exitのようなフックで実現 > していただけると助かります。 irb のプロセスの寿命と、obj(IRB::Context の @io)の寿命とが同じぐらいな のであれば、単純に at_exit を使うようにするだけでいいでしょうか。今の ところ、手元では問題なく動いています。とりあえず ruby_1_8{,_[67]} ブラ ンチにはそのままあたると思います。 -- Nobuhiro IMAI Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106 ----Next_Part(Mon_Jun__8_09_15_50_2009_256)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="irb18-save-history-at-exit.patch" Index: lib/irb/ext/save-history.rb =================================================================== --- lib/irb/ext/save-history.rb (revision 23644) +++ lib/irb/ext/save-history.rb (working copy) @@ -51,7 +51,7 @@ include Readline def HistorySavingAbility.create_finalizer - proc do + at_exit do if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0 if hf = IRB.conf[:HISTORY_FILE] file = File.expand_path(hf) @@ -66,7 +66,7 @@ end def HistorySavingAbility.extended(obj) - ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer) + HistorySavingAbility.create_finalizer obj.load_history obj end ----Next_Part(Mon_Jun__8_09_15_50_2009_256)----