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();