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 )
