You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2014/06/04 17:11:05 UTC

[6/7] git commit: More race conditions fixes

More race conditions fixes

Conflicts:
	rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a158f4fa
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a158f4fa
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a158f4fa

Branch: refs/heads/2.7.x-fixes
Commit: a158f4fa7ba073b7c6948e3172f84e89d96dd2a6
Parents: 5eea933
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jun 4 10:12:35 2014 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Wed Jun 4 10:55:46 2014 -0400

----------------------------------------------------------------------
 .../cxf/ws/policy/EndpointPolicyImpl.java       | 47 +++++++++++---------
 1 file changed, 27 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/a158f4fa/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java
----------------------------------------------------------------------
diff --git a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java
index 3f68e98..3ff6c62 100644
--- a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java
+++ b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java
@@ -50,9 +50,9 @@ public class EndpointPolicyImpl implements EndpointPolicy {
     private Policy policy;
     private Collection<Assertion> chosenAlternative;
     
-    private Collection<Assertion> vocabulary;
+    private volatile Collection<Assertion> vocabulary;
     private Collection<Assertion> faultVocabulary;
-    private List<Interceptor<? extends Message>> interceptors;
+    private volatile List<Interceptor<? extends Message>> interceptors;
     private List<Interceptor<? extends Message>> faultInterceptors;
     
     private EndpointInfo ei;
@@ -107,28 +107,28 @@ public class EndpointPolicyImpl implements EndpointPolicy {
         return chosenAlternative;
     }
     
-    public synchronized Collection<Assertion> getVocabulary() {
+    public Collection<Assertion> getVocabulary() {
         if (vocabulary == null) {
             initializeVocabulary();
         }
         return vocabulary;
     }
     
-    public synchronized Collection<Assertion> getFaultVocabulary() {
+    public Collection<Assertion> getFaultVocabulary() {
         if (vocabulary == null) {
             initializeVocabulary();
         }
         return faultVocabulary;
     }    
     
-    public synchronized List<Interceptor<? extends Message>> getInterceptors() {
+    public List<Interceptor<? extends Message>> getInterceptors() {
         if (interceptors == null) {
             initializeInterceptors();
         }
         return interceptors;
     }
     
-    public synchronized List<Interceptor<? extends Message>> getFaultInterceptors() {
+    public List<Interceptor<? extends Message>> getFaultInterceptors() {
         if (interceptors == null) {
             initializeInterceptors();
         }
@@ -194,9 +194,10 @@ public class EndpointPolicyImpl implements EndpointPolicy {
             return;
         }
 
-        vocabulary = new ArrayList<Assertion>();
+        List<Assertion> v = new ArrayList<Assertion>();
+        List<Assertion> fv = null;
         if (requestor) {
-            faultVocabulary = new ArrayList<Assertion>();
+            fv = new ArrayList<Assertion>();
         }
        
         // vocabulary of alternative chosen for endpoint
@@ -205,9 +206,9 @@ public class EndpointPolicyImpl implements EndpointPolicy {
                 if (a.isOptional()) {
                     continue;
                 }
-                vocabulary.add(a);            
-                if (null != faultVocabulary) {
-                    faultVocabulary.add(a);
+                v.add(a);            
+                if (null != fv) {
+                    fv.add(a);
                 }
             }
         }
@@ -220,28 +221,32 @@ public class EndpointPolicyImpl implements EndpointPolicy {
                 p = engine.getEffectiveServerRequestPolicy(ei, boi);
                 Collection<Assertion> c = engine.getAssertions(p, false);
                 if (c != null) {
-                    addAll(vocabulary, c);
+                    addAll(v, c);
                 }
             } else {
                 p = engine.getEffectiveClientResponsePolicy(ei, boi);
                 Collection<Assertion> c = engine.getAssertions(p, false);
                 if (c != null) {
-                    addAll(vocabulary, c);
-                    if (null != faultVocabulary) {
-                        addAll(faultVocabulary, c);
+                    addAll(v, c);
+                    if (null != fv) {
+                        addAll(fv, c);
                     }
                 }
-                if (boi.getFaults() != null && null != faultVocabulary) {
+                if (boi.getFaults() != null && null != fv) {
                     for (BindingFaultInfo bfi : boi.getFaults()) {
                         p = engine.getEffectiveClientFaultPolicy(ei, boi, bfi);
                         c = engine.getAssertions(p, false);
                         if (c != null) {
-                            addAll(faultVocabulary, c);
+                            addAll(fv, c);
                         }
                     }
                 }
             }
         }
+        if (requestor) {
+            faultVocabulary = fv;
+        }
+        vocabulary = v;
     }
 
     Collection<Assertion> getSupportedAlternatives(Policy p) {
@@ -292,8 +297,9 @@ public class EndpointPolicyImpl implements EndpointPolicy {
             }
         }
 
+        List<Interceptor<? extends Message>> tmp = null;
         if (requestor) {
-            interceptors = new ArrayList<Interceptor<? extends Message>>(out);
+            tmp = new ArrayList<Interceptor<? extends Message>>(out);
             out.clear();
             for (Assertion a : getChosenAlternative()) {
                 initializeInterceptors(reg, out, a, true);
@@ -313,10 +319,11 @@ public class EndpointPolicyImpl implements EndpointPolicy {
                     }
                 }
             }
-            interceptors = new ArrayList<Interceptor<? extends Message>>(out);
+            tmp = new ArrayList<Interceptor<? extends Message>>(out);
         } else {
-            interceptors = new ArrayList<Interceptor<? extends Message>>(out);            
+            tmp = new ArrayList<Interceptor<? extends Message>>(out);            
         }
+        interceptors = tmp;
     }
     
     // for test