You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2013/01/29 07:54:31 UTC

svn commit: r1439756 - in /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager: DependencyManager.java ServiceTracker.java

Author: djencks
Date: Tue Jan 29 06:54:31 2013
New Revision: 1439756

URL: http://svn.apache.org/viewvc?rev=1439756&view=rev
Log:
FELIX-3875 fix for services bound/unbound on configuration change

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1439756&r1=1439755&r2=1439756&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java Tue Jan 29 06:54:31 2013
@@ -1765,7 +1765,8 @@ public class DependencyManager<S, T> imp
         final ServiceTracker<T, RefPair<T>> oldTracker = trackerRef.get();
         Customizer<T> customizer = newCustomizer();
         customizer.setPreviousRefMap( refMap );
-        ServiceTracker<T, RefPair<T>> tracker = new ServiceTracker<T, RefPair<T>>( m_componentManager.getActivator().getBundleContext(), m_targetFilter, customizer );
+        boolean initialActive = oldTracker != null && oldTracker.isActive();
+        ServiceTracker<T, RefPair<T>> tracker = new ServiceTracker<T, RefPair<T>>( m_componentManager.getActivator().getBundleContext(), m_targetFilter, customizer, initialActive );
         customizer.setTracker( tracker );
         trackerRef.set( tracker );
         registered = true;

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java?rev=1439756&r1=1439755&r2=1439756&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java Tue Jan 29 06:54:31 2013
@@ -232,15 +232,17 @@ public class ServiceTracker<S, T> {
 	 *        is null, then this {@code ServiceTracker} will be used as the
 	 *        {@code ServiceTrackerCustomizer} and this {@code ServiceTracker}
 	 *        will call the {@code ServiceTrackerCustomizer} methods on itself.
+	 * @param initialActive Initial active state of the tracker.
 	 * @since 1.1
 	 */
-	public ServiceTracker(final BundleContext context, final Filter filter, final ServiceTrackerCustomizer<S, T> customizer) {
+	public ServiceTracker(final BundleContext context, final Filter filter, final ServiceTrackerCustomizer<S, T> customizer, boolean initialActive) {
 		this.context = context;
 		this.trackReference = null;
 		this.trackClass = null;
 		this.listenerFilter = filter.toString();
 		this.filter = filter;
 		this.customizer = customizer;
+		this.active = initialActive;
 		if ((context == null) || (filter == null)) {
 			/*
 			 * we throw a NPE here to be consistent with the other constructors
@@ -424,7 +426,6 @@ public class ServiceTracker<S, T> {
             if (outgoing == null) {
                 return;
             }
-            tracked = null;
             if (DEBUG) {
                 System.out.println("ServiceTracker.close: " + filter);
             }
@@ -432,6 +433,7 @@ public class ServiceTracker<S, T> {
         for (ServiceReference<S> ref: toUntrack.keySet()) {
             outgoing.untrack( ref, null );
         }
+        tracked = null;
     }
 
 	/**