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:[email protected]] Sent: lundi 2 avril 2012 22:40 To: [email protected] 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: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

