FELIX-3402 Applied a slightly modified version of the patch.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1433337 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
index 07a41a4..60b5781 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
@@ -603,16 +603,18 @@
* Removes all components and their dependencies.
*/
public void clear() {
- List services = getComponents();
- for (int i = services.size() - 1; i >= 0; i--) {
- Component service = (Component) services.get(i);
- remove(service);
+ Component[] components;
+ synchronized (m_components) {
+ components = (Component[]) m_components.toArray(new Component[m_components.size()]);
+ }
+ for (int i = components.length - 1; i >= 0; i--) {
+ Component component = (Component) components[i];
+ remove(component);
// remove any state listeners that are still registered
- if (service instanceof ComponentImpl) {
- ComponentImpl si = (ComponentImpl) service;
+ if (component instanceof ComponentImpl) {
+ ComponentImpl si = (ComponentImpl) component;
si.removeStateListeners();
}
}
}
-
}