Author: gnodet
Date: Wed Aug  1 19:24:19 2012
New Revision: 1368209

URL: http://svn.apache.org/viewvc?rev=1368209&view=rev
Log:
[ARIES-899] Possible concurrent access to the namespace handler registry

Modified:
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java?rev=1368209&r1=1368208&r2=1368209&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
 Wed Aug  1 19:24:19 2012
@@ -414,14 +414,26 @@ public class NamespaceHandlerRegistryImp
 
     protected synchronized void removeSchemasFor(NamespaceHandler handler) {
         List<Map<URI, NamespaceHandler>> keys = new ArrayList<Map<URI, 
NamespaceHandler>>();
-        for (Map<URI, NamespaceHandler> key : schemas.keySet()) {
-            if (key.values().contains(handler)) {
-                keys.add(key);
+        lock.readLock().lock();
+        try {
+            for (Map<URI, NamespaceHandler> key : schemas.keySet()) {
+                if (key.values().contains(handler)) {
+                    keys.add(key);
+                }
+            }
+        } finally {
+            lock.readLock().unlock();
+        }
+        if (!keys.isEmpty()) {
+            lock.writeLock().lock();
+            try {
+                for (Map<URI, NamespaceHandler> key : keys) {
+                    schemas.remove(key);
+                }
+            } finally {
+                lock.writeLock().unlock();
             }
         }
-        for (Map<URI, NamespaceHandler> key : keys) {
-            schemas.remove(key);
-        }
     }
 
     private SchemaFactory getSchemaFactory() {


Reply via email to