[picocontainer-scm] [scm-git][5] sync with pico 2 5795 threading issue bug.

Michael Rimov <git-yCVjj/[email protected]> Fri, 29 Jun 2012 12:26:13 -0500 (CDT)
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
commit eddc401ac5cdf484cd6bd391987fe651b0cf17a5
Author:     Michael Rimov <[email protected]>
AuthorDate: Mon Jun 25 06:29:25 2012 -0700
Commit:     Michael Rimov <[email protected]>
CommitDate: Mon Jun 25 06:29:25 2012 -0700

    sync with pico 2 5795 threading issue bug.

diff --git a/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java b/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java
index 0ed57a1..6e3e5d5 100644
--- a/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java
+++ b/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java
@@ -35,7 +35,7 @@ public abstract class IterativeInjector<T> extends AbstractInjector<T> {
     private static final Object[] NONE = new Object[0];
     
     private transient ThreadLocalCyclicDependencyGuard instantiationGuard;
-    protected transient List<AccessibleObject> injectionMembers;
+    protected volatile transient List<AccessibleObject> injectionMembers;
     protected transient Type[] injectionTypes;
     protected transient Annotation[] bindings;
 
@@ -79,8 +79,12 @@ public abstract class IterativeInjector<T> extends AbstractInjector<T> {
 
     private Parameter[] getMatchingParameterListForSetters(PicoContainer container) throws PicoCompositionException {
         if (injectionMembers == null) {
+        	synchronized(this) {
+        		if (injectionMembers == null) {
             initializeInjectionMembersAndTypeLists();
         }
+        	}
+        }
 
         final List<Object> matchingParameterList = new ArrayList<Object>(Collections.nCopies(injectionMembers.size(), null));