Author: pderop
Date: Thu Sep 24 20:58:58 2015
New Revision: 1705147

URL: http://svn.apache.org/viewvc?rev=1705147&view=rev
Log:
FELIX-5054: clean-up instance bound dependencies when the component is 
destroyed.

Modified:
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java?rev=1705147&r1=1705146&r2=1705147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
 Thu Sep 24 20:58:58 2015
@@ -996,6 +996,7 @@ public class ComponentImpl implements Co
         }
         if (oldState == ComponentState.INSTANTIATED_AND_WAITING_FOR_REQUIRED 
&& newState == ComponentState.WAITING_FOR_REQUIRED) {
             invoke(m_callbackDestroy);
+            removeInstanceBoundDependencies();
             invokeRemoveRequiredDependencies();
             notifyListeners(newState);
             if (! someDependenciesNeedInstance()) {
@@ -1437,6 +1438,19 @@ public class ComponentImpl implements Co
        }
        
        /**
+        * Removes and closes all instance bound dependencies.
+        * This method is called when a component is destroyed.
+        */
+    private void removeInstanceBoundDependencies() {
+       for (DependencyContext dep : m_dependencies) {
+               if (dep.isInstanceBound()) {
+                       m_dependencies.remove(dep);
+                       dep.stop();
+               }
+       }
+    }
+
+       /**
         * Clears the cache of invoked components callbacks.
         * We only clear the cache when the state machine is not running.
         * The cache is used to avoid calling the same bind callback twice.


Reply via email to