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() {