see FELIX-3345 We've been seeing intermittent exceptions from SCR which generally seem to look like trying to unget a service on a bundle context, BundleComponentActivator, ComponentManager, or DependencyManager that are shut down or being shut down. I think there are 2 threads shutting bundles down at once. I'm not making much progress investigation exactly how this happens so I'd really appreciate it if one of the experts could take a look at the stack traces in the issue and attempt to guess whether there's a real concurrency bug or if the situations we're seeing are expected when more than one thread is shutting down bundles at once, and the "don't throw an exception" patch I provided would be appropriate.
To try to pique your interest here is one of the stack traces: Stack Dump = org.osgi.framework.ServiceException: Exception in org.apache.felix.scr.impl.manager.DelayedComponentManager.ungetService() at org.eclipse.osgi.internal.serviceregistry.ServiceUse.releaseService(ServiceUse.java:287) at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.releaseService(ServiceRegistrationImpl.java:562) at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.releaseServicesInUse(ServiceRegistry.java:665) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.close(BundleContextImpl.java:91) at org.eclipse.osgi.framework.internal.core.BundleHost.stopWorker(BundleHost.java:514) at org.eclipse.osgi.framework.internal.core.AbstractBundle.suspend(AbstractBundle.java:565) at org.eclipse.osgi.framework.internal.core.Framework.suspendBundle(Framework.java:1161) at org.eclipse.osgi.framework.internal.core.StartLevelManager.decFWSL(StartLevelManager.java:595) at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:257) at org.eclipse.osgi.framework.internal.core.StartLevelManager.shutdown(StartLevelManager.java:215) at org.eclipse.osgi.framework.internal.core.InternalSystemBundle.suspend(InternalSystemBundle.java:284) at org.eclipse.osgi.framework.internal.core.Framework.shutdown(Framework.java:691) at org.eclipse.osgi.framework.internal.core.Framework.close(Framework.java:598) at org.eclipse.osgi.framework.internal.core.InternalSystemBundle$1.run(InternalSystemBundle.java:261) at java.lang.Thread.run(Thread.java:680) Caused by: java.lang.NullPointerException at org.apache.felix.scr.impl.BundleComponentActivator.log(BundleComponentActivator.java:614) at org.apache.felix.scr.impl.BundleComponentActivator.log(BundleComponentActivator.java:589) at org.apache.felix.scr.impl.manager.AbstractComponentManager.log(AbstractComponentManager.java:633) at org.apache.felix.scr.impl.manager.AbstractComponentManager$State.log(AbstractComponentManager.java:1000) at org.apache.felix.scr.impl.manager.AbstractComponentManager$State.ungetService(AbstractComponentManager.java:964) at org.apache.felix.scr.impl.manager.DelayedComponentManager.ungetService(DelayedComponentManager.java:114) at org.eclipse.osgi.internal.serviceregistry.ServiceUse$3.run(ServiceUse.java:277) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.internal.serviceregistry.ServiceUse.releaseService(ServiceUse.java:275) ... 14 more I think the DelayedComponentManager.State here is Disposed but we've also seen this trace with state Active but the bundle context stopped (so ungetting throws an exception). many thanks david jencks