Author: rotty3000
Date: Thu Oct 11 17:59:40 2018
New Revision: 1843578

URL: http://svn.apache.org/viewvc?rev=1843578&view=rev
Log:
FELIX-5962 Exception during event processing leaves CM threads alive and 
holding the JVM running during framework shutdown

Signed-off-by: Raymond Auge <[email protected]>

Modified:
    
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java

Modified: 
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java?rev=1843578&r1=1843577&r2=1843578&view=diff
==============================================================================
--- 
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
 (original)
+++ 
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
 Thu Oct 11 17:59:40 2018
@@ -1655,11 +1655,11 @@ public class ConfigurationManager implem
         }
 
 
-        private ConfigurationEvent getConfigurationEvent()
+        private ConfigurationEvent 
getConfigurationEvent(ServiceReference<ConfigurationAdmin> serviceReference)
         {
             if ( event == null )
             {
-                this.event = new ConfigurationEvent( getServiceReference(), 
type, factoryPid, pid );
+                this.event = new ConfigurationEvent( serviceReference, type, 
factoryPid, pid );
             }
             return event;
         }
@@ -1673,6 +1673,16 @@ public class ConfigurationManager implem
                 Log.logger.log( LogService.LOG_DEBUG, "Sending {0} event for 
{1} to {2}", new Object[]
                         { getTypeName(), pid, 
listenerReferences[serviceIndex]} );
 
+                final ServiceReference<ConfigurationAdmin> serviceReference = 
getServiceReference();
+
+                if (serviceReference == null)
+                {
+                    Log.logger.log( LogService.LOG_WARNING, "No 
ConfigurationAdmin for delivering configuration event to {0}", new Object[]
+                            { listenerReferences[serviceIndex] } );
+
+                    return;
+                }
+
                 try
                 {
                     if ( System.getSecurityManager() != null )
@@ -1683,7 +1693,7 @@ public class ConfigurationManager implem
                                 @Override
                                 public Void run()
                                 {
-                                    
listeners[serviceIndex].configurationEvent(getConfigurationEvent());
+                                    
listeners[serviceIndex].configurationEvent(getConfigurationEvent(serviceReference));
                                     return null;
                                 }
                             }, 
BaseTracker.getAccessControlContext(listenerProvider[serviceIndex])
@@ -1691,7 +1701,7 @@ public class ConfigurationManager implem
                     }
                     else
                     {
-                        
listeners[serviceIndex].configurationEvent(getConfigurationEvent());
+                        
listeners[serviceIndex].configurationEvent(getConfigurationEvent(serviceReference));
                     }
                 }
                 catch ( Throwable t )


Reply via email to