diff options
author | Markus Roberts <Markus@reality.com> | 2010-07-23 08:47:48 -0700 |
---|---|---|
committer | Markus Roberts <Markus@reality.com> | 2010-07-25 22:24:34 -0700 |
commit | 1d494a3104e9794cc09ba27c701ced68a74fa398 (patch) | |
tree | 40305914cbd9dacd8faa7f2e59c7ce755175f530 /lib/puppet | |
parent | 23830504dfeb48b2d162e44b84b6f9dfa97e4e7e (diff) | |
download | puppet-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.rb | 11 |
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 |