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;
}
/**