Author: fmeschbe
Date: Mon Apr 26 20:42:25 2010
New Revision: 938228

URL: http://svn.apache.org/viewvc?rev=938228&view=rev
Log:
FELIX-1502 Synchronize access to consumers set

Modified:
    
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/AccessManagerFactoryTracker.java

Modified: 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/AccessManagerFactoryTracker.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/AccessManagerFactoryTracker.java?rev=938228&r1=938227&r2=938228&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/AccessManagerFactoryTracker.java
 (original)
+++ 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/AccessManagerFactoryTracker.java
 Mon Apr 26 20:42:25 2010
@@ -57,14 +57,17 @@ public class AccessManagerFactoryTracker
     public void removedService(ServiceReference serviceReference, Object o) {
         log.warn("AccessManager service removed.");
         this.factory = null;
-        // Make a copy of consumers list to avoid concurrent modification
         closeSessions();
         super.removedService(serviceReference, o);
     }
 
     private void closeSessions() {
         log.warn("Closing all sessions");
-        Set<PluggableDefaultAccessManager> closing = new 
HashSet<PluggableDefaultAccessManager>(consumers);
+        // Make a copy of consumers list to avoid concurrent modification
+        Set<PluggableDefaultAccessManager> closing;
+        synchronized (consumers) {
+            closing = new HashSet<PluggableDefaultAccessManager>(consumers);
+        }
         for (PluggableDefaultAccessManager consumer : closing) {
             try {
                 consumer.endSession();
@@ -83,12 +86,16 @@ public class AccessManagerFactoryTracker
 
     public AccessManagerPluginFactory getFactory(PluggableDefaultAccessManager 
consumer) {
         log.debug("Registering PluggableDefaultAccessManager instance");
-        this.consumers.add(consumer);
+        synchronized (consumers) {
+            this.consumers.add(consumer);
+        }
         return factory;
     }
 
     public void unregister(PluggableDefaultAccessManager consumer) {
         log.debug("Unregistering PluggableDefaultAccessManager instance");
-        this.consumers.remove(consumer);
+        synchronized (consumers) {
+            this.consumers.remove(consumer);
+        }
     }
 }


Reply via email to