[Framework] Fix concurrency issue in CapabilitySet as reported by pderop
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1679367 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java b/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java
index 629d34d..60356c7 100644
--- a/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java
+++ b/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java
@@ -25,8 +25,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -88,7 +86,7 @@
for (int i = 0; (indexProps != null) && (i < indexProps.size()); i++)
{
m_indices.put(
- indexProps.get(i), new HashMap<Object, Set<BundleCapability>>());
+ indexProps.get(i), new ConcurrentHashMap<Object, Set<BundleCapability>>());
}
}
@@ -131,7 +129,7 @@
Set<BundleCapability> caps = index.get(capValue);
if (caps == null)
{
- caps = new HashSet<BundleCapability>();
+ caps = Collections.newSetFromMap(new ConcurrentHashMap<BundleCapability, Boolean>());
index.put(capValue, caps);
}
caps.add(cap);
@@ -194,7 +192,7 @@
private Set<Capability> match(Set<Capability> caps, final SimpleFilter sf)
{
- Set<Capability> matches = new HashSet<Capability>();
+ Set<Capability> matches = Collections.newSetFromMap(new ConcurrentHashMap<Capability, Boolean>());
if (sf.getOperation() == SimpleFilter.MATCH_ALL)
{