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