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 (Created) (JIRA)" <ji...@apache.org> on 2012/04/03 08:18:38 UTC

[jira] [Created] (FELIX-3421) Blocked Thread while shutting down Felix during iPojo service registration

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: iPOJO
    Affects Versions: iPOJO-1.8.0
         Environment: Win 7 / Java 1.6
            Reporter: David GAY


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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (FELIX-3421) Blocked Thread while shutting down Felix during iPojo service registration

Posted by "David GAY (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-3421?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David GAY updated FELIX-3421:
-----------------------------

    Attachment: threaddump-1333386501972.tdump

Full Thread Dump
                
> 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: iPOJO
>    Affects Versions: iPOJO-1.8.0
>         Environment: Win 7 / Java 1.6
>            Reporter: David GAY
>              Labels: block, bundle, ipojo, lock, thread
>         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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (FELIX-3421) Blocked Thread while shutting down Felix during iPojo service registration

Posted by "Clement Escoffier (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-3421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13254276#comment-13254276 ] 

Clement Escoffier commented on FELIX-3421:
------------------------------------------

Hi,

>From the thread dump, it's not clear it's related to iPOJO.

iPOJO is creating a component instance and to achieve this hold the lock on the factory (to avoid any state change while registering an instance). At the same time, Felix is stopped and so, the factory is stopped. The stopping process of the factory has to wait to acquire the factory lock. This is normal and expected.

The issue I don't get is why Felix is stucked during the service registration. As the registration is stucked, the instance creation never returns and as a consequence the lock on the factory is never released.
                
> 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: iPOJO
>    Affects Versions: iPOJO-1.8.0
>         Environment: Win 7 / Java 1.6
>            Reporter: David GAY
>              Labels: block, bundle, ipojo, lock, thread
>         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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (FELIX-3421) Blocked Thread while shutting down Felix during iPojo service registration

Posted by "Clement Escoffier (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-3421?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Clement Escoffier updated FELIX-3421:
-------------------------------------

    Component/s: Framework
    
> 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
>              Labels: block, bundle, ipojo, lock, thread
>         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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira