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); + } } }