FELIX-3875 fix for services bound/unbound on configuration change

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1439756 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index 190d03d..b405c50 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -1765,7 +1765,8 @@
         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;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java
index f31a938..d32ce39 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceTracker.java
@@ -232,15 +232,17 @@
 	 *        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 @@
             if (outgoing == null) {
                 return;
             }
-            tracked = null;
             if (DEBUG) {
                 System.out.println("ServiceTracker.close: " + filter);
             }
@@ -432,6 +433,7 @@
         for (ServiceReference<S> ref: toUntrack.keySet()) {
             outgoing.untrack( ref, null );
         }
+        tracked = null;
     }
 
 	/**