You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "David GAY (JIRA)" <ji...@apache.org> on 2014/01/21 19:57:19 UTC
[jira] [Closed] (FELIX-3421) Blocked Thread while shutting down
Felix during iPojo service registration
[ https://issues.apache.org/jira/browse/FELIX-3421?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David GAY closed FELIX-3421.
----------------------------
> Blocked Thread while shutting down Felix during iPojo service registration
> --------------------------------------------------------------------------
>
> Key: FELIX-3421
> URL: https://issues.apache.org/jira/browse/FELIX-3421
> Project: Felix
> Issue Type: Bug
> Components: Framework, iPOJO
> Affects Versions: iPOJO-1.8.0
> Environment: Win 7 / Java 1.6
> Reporter: David GAY
> Assignee: Clement Escoffier
> Labels: block, bundle, ipojo, lock, thread
> Fix For: ipojo-runtime-1.10
>
> Attachments: threaddump-1333386501972.tdump
>
>
> Problem when Felix is starting up and iPojo services are still registering while and in the meantime a stop Felix is requested.
> The code to stop Felix is : getBundle(0).stop()
> By looking at the Thread Dump it appears that iPojo is synchronously dealing with a bundle being stopped while at the same time trying to register a service for that bundle.
> Since the component framework is holding and/or needs its own internal lock when dealing with the stopped bundle and registering the service, we get into a deadlock situation, since both threads also need the bundle lock too.
> ThreadDump (full TD in attachement):
> "FelixStartLevel" daemon prio=6 tid=0x0000000006d6c000 nid=0xb00 waiting for monitor entry [0x0000000007fbf000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at org.apache.felix.ipojo.IPojoFactory.removeFactoryStateListener(IPojoFactory.java:491)
> - waiting to lock <0x00000000c048c790> (a org.apache.felix.ipojo.ComponentFactory)
> at org.apache.felix.ipojo.InstanceCreator.removeFactory(InstanceCreator.java:187)
> at org.apache.felix.ipojo.Extender.closeManagementFor(Extender.java:156)
> at org.apache.felix.ipojo.Extender.bundleChanged(Extender.java:129)
> at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
> at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
> at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4245)
> at org.apache.felix.framework.Felix.stopBundle(Felix.java:2352)
> at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1215)
> at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
> at java.lang.Thread.run(Unknown Source)
> "Thread-2" daemon prio=6 tid=0x0000000007050800 nid=0x6d8 in Object.wait() [0x00000000084bd000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x00000000c029d238> (a [Ljava.lang.Object;)
> at java.lang.Object.wait(Object.java:485)
> at org.apache.felix.framework.Felix.acquireBundleLock(Felix.java:4872)
> - locked <0x00000000c029d238> (a [Ljava.lang.Object;)
> at org.apache.felix.framework.Felix.registerService(Felix.java:3206)
> at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
> at org.apache.felix.ipojo.IPojoContext.registerService(IPojoContext.java:338)
> at org.apache.felix.ipojo.handlers.providedservice.ProvidedService.registerService(ProvidedService.java:345)
> - locked <0x00000000eafc8ea0> (a org.apache.felix.ipojo.handlers.providedservice.ProvidedService)
> at org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.__stateChanged(ProvidedServiceHandler.java:494)
> at org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.stateChanged(ProvidedServiceHandler.java)
> at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:471)
> at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:353)
> at org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:166)
> at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
> - locked <0x00000000c048c790> (a org.apache.felix.ipojo.ComponentFactory)
> at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
> at org.apache.felix.ipojo.Factory$$Proxy.createComponentInstance(Unknown Source)
> at com.axway.cmp.ume.ui.internal.ComponentDefinition.__createAndStart(ComponentDefinition.java:147)
> at com.axway.cmp.ume.ui.internal.ComponentDefinition.createAndStart(ComponentDefinition.java)
> at com.axway.cmp.ume.ui.internal.ComponentDefinition.__validate(ComponentDefinition.java:85)
> at com.axway.cmp.ume.ui.internal.ComponentDefinition.validate(ComponentDefinition.java)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.apache.felix.ipojo.util.Callback.call(Callback.java:237)
> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
> at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
> at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
> at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
> at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:471)
> at org.apache.felix.ipojo.InstanceManager.stateChanged(InstanceManager.java:1314)
> at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:496)
> at org.apache.felix.ipojo.HandlerManager.stateChanged(HandlerManager.java:239)
> at org.apache.felix.ipojo.Handler.setValidity(Handler.java:174)
> at org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__checkContext(DependencyHandler.java:186)
> - locked <0x00000000c048e1a8> (a [Lorg.apache.felix.ipojo.handlers.dependency.Dependency;)
> at org.apache.felix.ipojo.handlers.dependency.DependencyHandler.checkContext(DependencyHandler.java)
> at org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__validate(DependencyHandler.java:149)
> at org.apache.felix.ipojo.handlers.dependency.DependencyHandler.validate(DependencyHandler.java)
> at org.apache.felix.ipojo.util.DependencyModel.validate(DependencyModel.java:642)
> at org.apache.felix.ipojo.util.DependencyModel.computeDependencyState(DependencyModel.java:310)
> at org.apache.felix.ipojo.util.DependencyModel.manageArrival(DependencyModel.java:399)
> at org.apache.felix.ipojo.util.DependencyModel.addedService(DependencyModel.java:335)
> at org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:725)
> at org.apache.felix.ipojo.util.Tracker$Tracked.track(Tracker.java:686)
> at org.apache.felix.ipojo.util.Tracker$Tracked.serviceChanged(Tracker.java:647)
> at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
> at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
> at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
> at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4261)
> at org.apache.felix.framework.Felix.registerService(Felix.java:3276)
> at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
> at org.apache.felix.ipojo.IPojoFactory.start(IPojoFactory.java:591)
> - locked <0x00000000c048c790> (a org.apache.felix.ipojo.ComponentFactory)
> at org.apache.felix.ipojo.Extender.createAbstractFactory(Extender.java:439)
> at org.apache.felix.ipojo.Extender.parse(Extender.java:264)
> at org.apache.felix.ipojo.Extender.startManagementFor(Extender.java:208)
> at org.apache.felix.ipojo.Extender.access$600(Extender.java:52)
> at org.apache.felix.ipojo.Extender$CreatorThread.run(Extender.java:682)
> at java.lang.Thread.run(Unknown Source)
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)