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 2016/11/26 17:38:53 UTC

svn commit: r1771506 - /felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java

Author: pderop
Date: Sat Nov 26 17:38:53 2016
New Revision: 1771506

URL: http://svn.apache.org/viewvc?rev=1771506&view=rev
Log:
FELIX-5429: do not invoke swap callback in case state is INSTANTIATED_AND_WAITING_FOR_REQUIRED and dependency is optional and component has not been called in start().

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=1771506&r1=1771505&r2=1771506&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 Sat Nov 26 17:38:53 2016
@@ -1219,13 +1219,11 @@ public class ComponentImpl implements Co
         case INSTANTIATED_AND_WAITING_FOR_REQUIRED:
             // Only swap *non* instance-bound dependencies
             if (!dc.isInstanceBound()) {
-                if (dc.isRequired()) {
-                    dc.invokeCallback(EventType.SWAPPED, oldEvent, newEvent);
-                }
+            	invokeSwapCallback(dc, oldEvent, newEvent);
             }
             break;
         case TRACKING_OPTIONAL:
-            dc.invokeCallback(EventType.SWAPPED, oldEvent, newEvent);
+        	invokeSwapCallback(dc, oldEvent, newEvent);
             break;
         default:
         }
@@ -1494,6 +1492,17 @@ public class ComponentImpl implements Co
 	}
 	
 	/**
+	 * Invokes a swap callback, except if the dependency is optional and the component is 
+	 * not started (optional dependencies are always injected while the component is started). 
+	 */
+	private void invokeSwapCallback(DependencyContext dc, Event oldEvent, Event newEvent) {
+		if (! dc.isRequired() && ! m_startCalled) {
+			return;
+		}
+        dc.invokeCallback(EventType.SWAPPED, oldEvent, newEvent);
+	}
+	
+	/**
 	 * Removes and closes all instance bound dependencies.
 	 * This method is called when a component is destroyed.
 	 */