You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2015/09/24 22:58:58 UTC
svn commit: r1705147 -
/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
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.