わたなべです.

Yukihiro Matsumoto <matz / netlab.co.jp> writes:

:In message "[ruby-list:21065] Re: tempfile.rb BUG"
:    on 00/02/28, WATANABE Hirofumi <Hirofumi.Watanabe / jp.sony.com> writes:
:
:|Win95/98 だと open したまま unlink ってことになって失敗して
:|るのかなあ? だとすると unlink する前に close しないとまずいか.
:
:closeしてからunlinkしてると思うんですが。
:あ、GCに頼ればcloseされないか。うーむ。

cygwin の source を見ると unlink は DeleteFileA API が失敗し
たら delete queue に放りこんで exit 時に消すという処理が入っ
てました. なんか凄い.
でも Win95/98 だと消えないのかなあ?

しょーがないから close する?

--- lib/tempfile.rb.orig Thu Oct 14 10:14:08 1999 +++ lib/tempfile.rb Mon Feb 28 19:34:29 2000 @@ -17,12 +17,13 @@ - def Tempfile.callback(path) + def callback lambda{ - print "removing ", path, "..." if $DEBUG - if File.exist?(path) - File.unlink(path) + @tmpfile.close if @tmpfile and not @tmpfile.closed? + Kernel::print "removing ", @tmpname, "..." if $DEBUG + if File.exist?(@tmpname) + File.unlink(@tmpname) end - if File.exist?(path + '.lock') - Dir.rmdir(path + '.lock') + if File.exist?(@tmpname + '.lock') + Dir.rmdir(@tmpname + '.lock') end - print "done\n" if $DEBUG + Kernel::print "done\n" if $DEBUG } @@ -49,3 +50,3 @@ - @clean_files = Tempfile.callback(tmpname) + @clean_files = callback ObjectSpace.define_finalizer(self, @clean_files)