mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/tempfile.rb (Tempfile::Remover): new class to replace
Tempfile.callback. port r24902 from Ruby 1.8. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3f9bc1fd88
commit
d6fb854ecb
2 changed files with 32 additions and 21 deletions
|
@ -1,3 +1,8 @@
|
|||
Sat Feb 13 12:17:52 2010 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/tempfile.rb (Tempfile::Remover): new class to replace
|
||||
Tempfile.callback. port r24902 from Ruby 1.8.
|
||||
|
||||
Fri Feb 12 17:55:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* vm.c (thread_free): fixed typo.
|
||||
|
|
|
@ -128,7 +128,7 @@ class Tempfile < DelegateClass(File)
|
|||
# number of tries, then it will raise an exception.
|
||||
def initialize(basename, *rest)
|
||||
@data = []
|
||||
@clean_proc = self.class.callback(@data)
|
||||
@clean_proc = Remover.new(@data)
|
||||
ObjectSpace.define_finalizer(self, @clean_proc)
|
||||
|
||||
create(basename, *rest) do |tmpname, n, opts|
|
||||
|
@ -230,7 +230,7 @@ class Tempfile < DelegateClass(File)
|
|||
if File.exist?(@tmpname)
|
||||
File.unlink(@tmpname)
|
||||
end
|
||||
# remove tmpname from callback
|
||||
# remove tmpname from remover
|
||||
@data[0] = @data[2] = nil
|
||||
@data = @tmpname = nil
|
||||
rescue Errno::EACCES
|
||||
|
@ -257,12 +257,16 @@ class Tempfile < DelegateClass(File)
|
|||
end
|
||||
alias length size
|
||||
|
||||
class << self
|
||||
def callback(data) # :nodoc:
|
||||
pid = $$
|
||||
Proc.new {
|
||||
if pid == $$
|
||||
path, tmpfile = *data
|
||||
# :stopdoc:
|
||||
class Remover
|
||||
def initialize(data)
|
||||
@pid = $$
|
||||
@data = data
|
||||
end
|
||||
|
||||
def call(*args)
|
||||
if @pid == $$
|
||||
path, tmpfile = *@data
|
||||
|
||||
STDERR.print "removing ", path, "..." if $DEBUG
|
||||
|
||||
|
@ -275,9 +279,11 @@ class Tempfile < DelegateClass(File)
|
|||
|
||||
STDERR.print "done\n" if $DEBUG
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
# :startdoc:
|
||||
|
||||
class << self
|
||||
# Creates a new Tempfile.
|
||||
#
|
||||
# If no block is given, this is a synonym for Tempfile.new.
|
||||
|
|
Loading…
Reference in a new issue