summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2010-07-23 08:47:48 -0700
committerMarkus Roberts <Markus@reality.com>2010-07-25 22:24:34 -0700
commit1d494a3104e9794cc09ba27c701ced68a74fa398 (patch)
tree40305914cbd9dacd8faa7f2e59c7ce755175f530 /lib/puppet
parent23830504dfeb48b2d162e44b84b6f9dfa97e4e7e (diff)
downloadpuppet-1d494a3104e9794cc09ba27c701ced68a74fa398.tar.gz
puppet-1d494a3104e9794cc09ba27c701ced68a74fa398.tar.xz
puppet-1d494a3104e9794cc09ba27c701ced68a74fa398.zip
Tweak to fix for #4302--dangling ref to known_resource_types
Since we were clearing the thread variable containing the compiler's reference to it's environment's known resource types at the start of each compile the reference remaining at the end of a compilation could never be used and was thus just garbage that we were arbitrarily retaining. This patch moves the clearing of the thread var to the _end_ of compilation so that it's always nil except in the middle of a compile. This raises an interesting question; should the ref just live on the compiler object and we could dispense with the thread-var? It might require things that now only know about the environment to need a ref to the compiler and introduce other thread issues (e.g. we might just end up needing a :current_compiler thread variable, for no net gain in simplicity).
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/parser/compiler.rb11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
index 760d5a75a..61bb13cb6 100644
--- a/lib/puppet/parser/compiler.rb
+++ b/lib/puppet/parser/compiler.rb
@@ -15,16 +15,15 @@ class Puppet::Parser::Compiler
include Puppet::Resource::TypeCollectionHelper
def self.compile(node)
- # At the start of a new compile we don't assume anything about
- # known_resouce_types; we'll get these from the environment and
- # cache them in a thread variable for the duration of the
- # compilation.
- Thread.current[:known_resource_types] = nil
new(node).compile.to_resource
rescue => detail
puts detail.backtrace if Puppet[:trace]
raise Puppet::Error, "#{detail} on node #{node.name}"
- end
+ ensure
+ # We get these from the environment and only cache them in a thread
+ # variable for the duration of the compilation.
+ Thread.current[:known_resource_types] = nil
+ end
attr_reader :node, :facts, :collections, :catalog, :node_scope, :resources, :relationships