[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 2.6.1rc1-141-gcdb2b90

Markus Roberts Markus at reality.com
Mon Aug 16 12:48:11 UTC 2010


The following commit has been merged in the upstream branch:
commit 1d494a3104e9794cc09ba27c701ced68a74fa398
Author: Markus Roberts <Markus at reality.com>
Date:   Fri Jul 23 08:47:48 2010 -0700

    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).

diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
index 760d5a7..61bb13c 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
 

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list