summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
authorAndrew Shafer <andrew@reductivelabs.com>2008-08-22 23:53:08 -0600
committerJames Turnbull <james@lovedthanlost.net>2008-08-23 22:03:10 +1000
commit0d118a5f22e8f2c9f72b51e8848514d779c09d36 (patch)
treeebb967cbeb8ee69ad2a26774fad4eec56b394d63 /lib/puppet/parser
parent5851061d8e6d1dded479b33f7a8da67a3346891c (diff)
downloadpuppet-0d118a5f22e8f2c9f72b51e8848514d779c09d36.tar.gz
puppet-0d118a5f22e8f2c9f72b51e8848514d779c09d36.tar.xz
puppet-0d118a5f22e8f2c9f72b51e8848514d779c09d36.zip
Fix leaking LoadedFile when adding templates to be watched
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/parser_support.rb31
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb
index d70722fdd..853d6aa86 100644
--- a/lib/puppet/parser/parser_support.rb
+++ b/lib/puppet/parser/parser_support.rb
@@ -95,11 +95,10 @@ class Puppet::Parser::Parser
raise Puppet::Error, "Could not find file %s" % file
end
end
- if @files.detect { |f| f.file == file }
- raise Puppet::AlreadyImportedError.new("Import loop detected")
- else
- @files << Puppet::Util::LoadedFile.new(file)
+ if check_and_add_to_watched_files(file)
@lexer.file = file
+ else
+ raise Puppet::AlreadyImportedError.new("Import loop detected")
end
end
@@ -216,7 +215,7 @@ class Puppet::Parser::Parser
# Initialize or reset all of our variables.
def initvars
@lexer = Puppet::Parser::Lexer.new()
- @files = []
+ @files = {}
@loaded = []
end
@@ -435,8 +434,8 @@ class Puppet::Parser::Parser
# See if any of the files have changed.
def reparse?
- if file = @files.detect { |file| file.changed? }
- return file.stamp
+ if file = @files.detect { |name, file| file.changed? }
+ return file[1].stamp
else
return false
end
@@ -449,12 +448,18 @@ class Puppet::Parser::Parser
# Add a new file to be checked when we're checking to see if we should be
# reparsed. This is basically only used by the TemplateWrapper to let the
# parser know about templates that should be parsed.
- def watch_file(*files)
- files.each do |file|
- unless file.is_a? Puppet::Util::LoadedFile
- file = Puppet::Util::LoadedFile.new(file)
- end
- @files << file
+ def watch_file(filename)
+ check_and_add_to_watched_files(filename)
+ end
+
+ private
+
+ def check_and_add_to_watched_files(filename)
+ unless @files.include?(filename)
+ @files[filename] = Puppet::Util::LoadedFile.new(filename)
+ return true
+ else
+ return false
end
end
end