FELIX-355 ConfigurationAdmin service is unregistered after it has been cleaned up
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@573174 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
index 7c5f628..c59cc80 100644
--- a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
+++ b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
@@ -44,6 +44,7 @@
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.cm.ConfigurationEvent;
import org.osgi.service.cm.ConfigurationException;
@@ -112,6 +113,9 @@
// the BundleContext of the Configuration Admin Service bundle
private BundleContext bundleContext;
+ // the service registration of the configuration admin
+ private ServiceRegistration configurationAdminRegistration;
+
// the service reference to the ConfigurationAdmin service
private ServiceReference configurationAdminReference;
@@ -203,7 +207,7 @@
props.put( Constants.SERVICE_PID, "org.apache.felix.cm.ConfigurationAdmin" );
props.put( Constants.SERVICE_DESCRIPTION, "Configuration Admin Service Specification 1.2 Implementation" );
props.put( Constants.SERVICE_VENDOR, "Apache Software Foundation" );
- bundleContext.registerService( ConfigurationAdmin.class.getName(), caf, props );
+ configurationAdminRegistration = bundleContext.registerService( ConfigurationAdmin.class.getName(), caf, props );
// start handling ManagedService[Factory] services
managedServiceTracker = new ManagedServiceTracker();
@@ -213,6 +217,11 @@
public void stop( BundleContext bundleContext )
{
+
+ // immediately unregister the Configuration Admin before cleaning up
+ configurationAdminRegistration.unregister();
+ configurationAdminRegistration = null;
+
// stop handling ManagedService[Factory] services
managedServiceFactoryTracker.close();
managedServiceTracker.close();