You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by "Gay David (Annecy)" <dg...@axway.com> on 2012/04/02 19:46:46 UTC

Blocked Thread while shutting down Felix / IPojo

Hi,

I'm currently have a problem with Felix and or IPojo.
Basically the problem is when Felix is starting up and services are still registering while and in the meantime a stop Felix is request.
The code to stop is simple : getBundle(0).stop();

If I have a look at the thread dump on JVisualVM, I have (full thread dump 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)

   Locked ownable synchronizers:
                - None

And

"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)

While I'm still investigating what's happen, it looks like I'm having the issue https://issues.apache.org/jira/browse/FELIX-3393  but I'm not sure
I'm using Felix 4.0.2, but I got the same problem with the latest trunk.

I would like to do a simple test case to reproduce the problem on a simple test case, but without success for the moment.
Is it possible that the #3393 issue may be the root cause ?
Maybe an iPojo issue ? (I could post a brief sample of what I do with iPojo factories in ComponentDefinition class if it helps)
Or maybe my code (Normally 99,99% of the time it's my fault) ;-)

Thanks for your help
WBR // David



RE: Blocked Thread while shutting down Felix / IPojo

Posted by "Gay David (Annecy)" <dg...@axway.com>.
Hi,

Thanks for your analysis Richard, I have open an issue on iPojo
here : https://issues.apache.org/jira/browse/FELIX-3421

It the meantime, I will try to find a workaround to solve my problem.

WBR // David

-----Original Message-----
From: Richard S. Hall [mailto:heavy@ungoverned.org] 
Sent: lundi 2 avril 2012 22:40
To: users@felix.apache.org
Subject: Re: Blocked Thread while shutting down Felix / IPojo

This is not related to FELIX-3393, although it appears related to the 
Aries Blueprint comment on FELIX-3393, which is also unrelated to 
FELIX-3393.

It appears in both situations the component framework (Aries Blueprint 
and/or 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.

Perhaps just open an issue against the framework to track this.

-> richard

On 4/2/12 13:46, Gay David (Annecy) wrote:
>
> Hi,
>
> I'm currently have a problem with Felix and or IPojo.
>
> Basically the problem is when Felix is starting up and services are 
> still registering while and in the meantime a stop Felix is request.
>
> The code to stop is simple : getBundle(0).stop();
>
> If I have a look at the thread dump on JVisualVM, I have (full thread 
> dump 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)
>
>    Locked ownable synchronizers:
>
>                 - None
>
> And
>
> "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)
>
> While I'm still investigating what's happen, it looks like I'm having 
> the issue https://issues.apache.org/jira/browse/FELIX-3393  but I'm 
> not sure
>
> I'm using Felix 4.0.2, but I got the same problem with the latest trunk.
>
> I would like to do a simple test case to reproduce the problem on a 
> simple test case, but without success for the moment.
>
> Is it possible that the #3393 issue may be the root cause ?
>
> Maybe an iPojo issue ? (I could post a brief sample of what I do with 
> iPojo factories in ComponentDefinition class if it helps)
>
> Or maybe my code (Normally 99,99% of the time it's my fault) ;-)
>
> Thanks for your help
>
> WBR // David
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Blocked Thread while shutting down Felix / IPojo

Posted by "Richard S. Hall" <he...@ungoverned.org>.
This is not related to FELIX-3393, although it appears related to the 
Aries Blueprint comment on FELIX-3393, which is also unrelated to 
FELIX-3393.

It appears in both situations the component framework (Aries Blueprint 
and/or 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.

Perhaps just open an issue against the framework to track this.

-> richard

On 4/2/12 13:46, Gay David (Annecy) wrote:
>
> Hi,
>
> I'm currently have a problem with Felix and or IPojo.
>
> Basically the problem is when Felix is starting up and services are 
> still registering while and in the meantime a stop Felix is request.
>
> The code to stop is simple : getBundle(0).stop();
>
> If I have a look at the thread dump on JVisualVM, I have (full thread 
> dump 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)
>
>    Locked ownable synchronizers:
>
>                 - None
>
> And
>
> "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)
>
> While I'm still investigating what's happen, it looks like I'm having 
> the issue https://issues.apache.org/jira/browse/FELIX-3393  but I'm 
> not sure
>
> I'm using Felix 4.0.2, but I got the same problem with the latest trunk.
>
> I would like to do a simple test case to reproduce the problem on a 
> simple test case, but without success for the moment.
>
> Is it possible that the #3393 issue may be the root cause ?
>
> Maybe an iPojo issue ? (I could post a brief sample of what I do with 
> iPojo factories in ComponentDefinition class if it helps)
>
> Or maybe my code (Normally 99,99% of the time it's my fault) ;-)
>
> Thanks for your help
>
> WBR // David
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org

Re: Blocked Thread while shutting down Felix / IPojo

Posted by Matias SM <ma...@yahoo.com.ar>.
I don't know if that may be your issue but in the book "OSGi in action" 
[1] they recommend that if a bundle want to stop itself, it should do so 
in a different thread. This is to avoid possible deadlocks if as part of 
the bundle finalization there is any waiting for the calls to finish. 
You can refer to the book's source code examples [2].

HTH, Regards

[1] http://www.manning.com/hall/
[2] 
http://code.google.com/p/osgi-in-action/source/browse/trunk/chapter03/shell-example/org.foo.shell/src/org/foo/shell/StopCommand.java


On 02/04/12 14:46, Gay David (Annecy) wrote:
>
> Hi,
>
> I'm currently have a problem with Felix and or IPojo.
>
> Basically the problem is when Felix is starting up and services are 
> still registering while and in the meantime a stop Felix is request.
>
> The code to stop is simple : getBundle(0).stop();
>
> If I have a look at the thread dump on JVisualVM, I have (full thread 
> dump 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)
>
>    Locked ownable synchronizers:
>
>                 - None
>
> And
>
> "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)
>
> While I'm still investigating what's happen, it looks like I'm having 
> the issue https://issues.apache.org/jira/browse/FELIX-3393  but I'm 
> not sure
>
> I'm using Felix 4.0.2, but I got the same problem with the latest trunk.
>
> I would like to do a simple test case to reproduce the problem on a 
> simple test case, but without success for the moment.
>
> Is it possible that the #3393 issue may be the root cause ?
>
> Maybe an iPojo issue ? (I could post a brief sample of what I do with 
> iPojo factories in ComponentDefinition class if it helps)
>
> Or maybe my code (Normally 99,99% of the time it's my fault) ;-)
>
> Thanks for your help
>
> WBR // David
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org