[
https://issues.apache.org/jira/browse/FELIX-5959?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16658885#comment-16658885
]
Carsten Ziegeler commented on FELIX-5959:
-----------------------------------------
Ray just explained it to, this can basically happening if for example
configuration admin starts sending out configuration events and down the change
some receiver is shutting down configuration admin. In that case the thread has
already the lock
> Exception on changecount timer timeout
> --------------------------------------
>
> Key: FELIX-5959
> URL: https://issues.apache.org/jira/browse/FELIX-5959
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Reporter: Raymond Augé
> Assignee: Raymond Augé
> Priority: Major
> Fix For: scr-2.1.12
>
>
> When running a large system with complex and deeply nested component graph,
> the changecount timer can time out resulting in exceptions like:
> {code}
> [junit] java.lang.IllegalStateException: Timer already cancelled.
> [junit] at java.util.Timer.sched(Timer.java:397)
> [junit] at java.util.Timer.schedule(Timer.java:193)
> [junit] at
> org.apache.felix.scr.impl.ComponentRegistry.updateChangeCount(ComponentRegistry.java:722)
> [junit] at
> org.apache.felix.scr.impl.BundleComponentActivator.updateChangeCount(BundleComponentActivator.java:777)
> [junit] at
> org.apache.felix.scr.impl.manager.AbstractComponentManager.setState(AbstractComponentManager.java:1420)
> [junit] at
> org.apache.felix.scr.impl.manager.AbstractComponentManager.deactivateInternal(AbstractComponentManager.java:806)
> [junit] at
> org.apache.felix.scr.impl.manager.DependencyManager.deactivateComponentManager(DependencyManager.java:2330)
> [junit] at
> org.apache.felix.scr.impl.manager.DependencyManager.access$400(DependencyManager.java:56)
> [junit] at
> org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:1125)
> [junit] at
> org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:1007)
> [junit] at
> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1242)
> [junit] at
> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1137)
> [junit] at
> org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.untrack(ServiceTracker.java:997)
> [junit] at
> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1176)
> [junit] at
> org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:125)
> [junit] at
> org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
> [junit] at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:891)
> [junit] at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:804)
> [junit] at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:222)
> [junit] at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.unregisterServices(ServiceRegistry.java:668)
> [junit] at
> org.eclipse.osgi.internal.framework.BundleContextImpl.close(BundleContextImpl.java:96)
> [junit] at
> org.eclipse.osgi.internal.framework.EquinoxBundle.stopWorker0(EquinoxBundle.java:1018)
> [junit] at
> org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.stopWorker(EquinoxBundle.java:359)
> [junit] at org.eclipse.osgi.container.Module.doStop(Module.java:636)
> [junit] at org.eclipse.osgi.container.Module.stop(Module.java:498)
> [junit] at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.decStartLevel(ModuleContainer.java:1723)
> [junit] at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1642)
> [junit] at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1555)
> [junit] at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
> [junit] at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
> [junit] at
> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
> {code}
> There are two issues:
> - the timeout is not configurable (hard coded to {{5000L}})
> - the exception is not handled in a safe way (i.e. logged to an appropriate
> log which ends up in the system log)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)