You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Guillaume Sauthier (JIRA)" <ji...@apache.org> on 2013/06/14 13:32:19 UTC

[jira] [Closed] (FELIX-4123) Deadlock in new extender because of factory lock used in removedService

     [ https://issues.apache.org/jira/browse/FELIX-4123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Sauthier closed FELIX-4123.
-------------------------------------

    Resolution: Invalid

Recent changes in ManagedType make this stack no more possible
Please re-open if you hit again that issue
                
> Deadlock in new extender because of factory lock used in removedService
> -----------------------------------------------------------------------
>
>                 Key: FELIX-4123
>                 URL: https://issues.apache.org/jira/browse/FELIX-4123
>             Project: Felix
>          Issue Type: Bug
>          Components: iPOJO
>    Affects Versions: ipojo-runtime-1.10
>            Reporter: Clement Escoffier
>            Assignee: Guillaume Sauthier
>             Fix For: ipojo-runtime-1.10.1
>
>
> Here is the stack trace
> 2013-06-11 21:18:35
> Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.45-b01-451 mixed mode):
> "BundleWatcher: 1" daemon prio=5 tid=7ff90733b000 nid=0x1120d0000 waiting on condition [1120cf000]
>    java.lang.Thread.State: WAITING (parking)
> 	at sun.misc.Unsafe.park(Native Method)
> 	- parking to wait for  <7f4676828> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> 	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
> 	at java.util.concurrent.DelayQueue.take(DelayQueue.java:160)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
> 	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
> 	at java.lang.Thread.run(Thread.java:680)
> "CM Event Dispatcher" daemon prio=5 tid=7ff905407000 nid=0x111fcd000 in Object.wait() [111fcc000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f45e14a8> (a java.util.LinkedList)
> 	at java.lang.Object.wait(Object.java:485)
> 	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:77)
> 	- locked <7f45e14a8> (a java.util.LinkedList)
> 	at java.lang.Thread.run(Thread.java:680)
> "CM Configuration Updater" daemon prio=5 tid=7ff905406000 nid=0x111eca000 in Object.wait() [111ec9000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f45e1458> (a java.util.LinkedList)
> 	at java.lang.Object.wait(Object.java:485)
> 	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:77)
> 	- locked <7f45e1458> (a java.util.LinkedList)
> 	at java.lang.Thread.run(Thread.java:680)
> "[iPOJO] pool-1-thread-1" prio=5 tid=7ff9057bb800 nid=0x111dc7000 waiting for monitor entry [111dc6000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
> 	at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:254)
> 	- waiting to lock <7f42b4398> (a org.apache.felix.ipojo.ComponentFactory)
> 	at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:235)
> 	at org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:292)
> 	at org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:286)
> 	at org.apache.felix.ipojo.extender.internal.queue.JobInfoCallable.call(JobInfoCallable.java:100)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
> 	at java.lang.Thread.run(Thread.java:680)
> "FelixStartLevel" daemon prio=5 tid=7ff9071bc000 nid=0x111600000 in Object.wait() [1115ff000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f47007c0> (a java.util.ArrayList)
> 	at java.lang.Object.wait(Object.java:485)
> 	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:279)
> 	- locked <7f47007c0> (a java.util.ArrayList)
> 	at java.lang.Thread.run(Thread.java:680)
> "FelixDispatchQueue" prio=5 tid=7ff903094800 nid=0x111817000 in Object.wait() [111816000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f4628230> (a java.util.ArrayList)
> 	at java.lang.Object.wait(Object.java:485)
> 	at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:1063)
> 	- locked <7f4628230> (a java.util.ArrayList)
> 	at org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)
> 	at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:101)
> 	at java.lang.Thread.run(Thread.java:680)
> "Low Memory Detector" daemon prio=5 tid=7ff90301a800 nid=0x110dd7000 runnable [00000000]
>    java.lang.Thread.State: RUNNABLE
> "C2 CompilerThread1" daemon prio=9 tid=7ff90301a000 nid=0x110cd4000 waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
> "C2 CompilerThread0" daemon prio=9 tid=7ff903019000 nid=0x110bd1000 waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
> "Signal Dispatcher" daemon prio=9 tid=7ff903018800 nid=0x110ace000 waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
> "Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=7ff903017800 nid=0x1109cb000 waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
> "Finalizer" daemon prio=8 tid=7ff90513d800 nid=0x1107c0000 in Object.wait() [1107bf000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f44c0858> (a java.lang.ref.ReferenceQueue$Lock)
> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
> 	- locked <7f44c0858> (a java.lang.ref.ReferenceQueue$Lock)
> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
> 	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)
> "Reference Handler" daemon prio=10 tid=7ff90513c800 nid=0x1106bd000 in Object.wait() [1106bc000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <7f44c0870> (a java.lang.ref.Reference$Lock)
> 	at java.lang.Object.wait(Object.java:485)
> 	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
> 	- locked <7f44c0870> (a java.lang.ref.Reference$Lock)
> "main" prio=5 tid=7ff906800800 nid=0x10884b000 waiting on condition [108847000]
>    java.lang.Thread.State: WAITING (parking)
> 	at sun.misc.Unsafe.park(Native Method)
> 	- parking to wait for  <7f3251978> (a java.util.concurrent.FutureTask$Sync)
> 	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
> 	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:218)
> 	at java.util.concurrent.FutureTask.get(FutureTask.java:83)
> 	at org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport.removedService(ManagedType.java:337)
> 	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:922)
> 	at org.osgi.util.tracker.AbstractTracked.untrack(AbstractTracked.java:351)
> 	at org.osgi.util.tracker.ServiceTracker.close(ServiceTracker.java:403)
> 	at org.apache.felix.ipojo.extender.internal.linker.ManagedType.stateChanged(ManagedType.java:189)
> 	at org.apache.felix.ipojo.IPojoFactory.stop(IPojoFactory.java:562)
> 	- locked <7f42b4398> (a org.apache.felix.ipojo.ComponentFactory)
> 	at org.apache.felix.ipojo.IPojoFactory.dispose(IPojoFactory.java:591)
> 	- locked <7f42b4398> (a org.apache.felix.ipojo.ComponentFactory)
> 	at org.apache.felix.ipojo.extender.internal.linker.ManagedType.stop(ManagedType.java:167)
> 	at org.apache.felix.ipojo.extender.internal.linker.DeclarationLinker.removedService(DeclarationLinker.java:107)
> 	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:922)
> 	at org.osgi.util.tracker.AbstractTracked.untrack(AbstractTracked.java:351)
> 	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:865)
> 	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:4401)
> 	at org.apache.felix.framework.Felix.access$000(Felix.java:74)
> 	at org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:390)
> 	at org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:151)
> 	at org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:127)
> 	at org.apache.felix.ipojo.extender.internal.AbstractService.stop(AbstractService.java:73)
> 	at org.apache.felix.ipojo.extender.internal.processor.ComponentsBundleProcessor$ComponentsAndInstances.stop(ComponentsBundleProcessor.java:223)
> 	at org.apache.felix.ipojo.extender.internal.processor.ComponentsBundleProcessor.deactivate(ComponentsBundleProcessor.java:112)
> 	at org.apache.felix.ipojo.extender.internal.processor.ForwardingBundleProcessor.deactivate(ForwardingBundleProcessor.java:42)
> 	at org.apache.felix.ipojo.extender.internal.processor.ChainedBundleProcessor.deactivate(ChainedBundleProcessor.java:100)
> 	at org.apache.felix.ipojo.extender.internal.Extender$1.removedBundle(Extender.java:173)
> 	at org.osgi.util.tracker.BundleTracker$Tracked.customizerRemoved(BundleTracker.java:467)
> 	at org.osgi.util.tracker.AbstractTracked.untrack(AbstractTracked.java:351)
> 	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:420)
> 	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:4385)
> 	at org.apache.felix.framework.Felix.stopBundle(Felix.java:2508)
> 	at org.apache.felix.framework.BundleImpl.stop(BundleImpl.java:991)
> 	at org.apache.felix.framework.BundleImpl.stop(BundleImpl.java:978)
> 	at org.apache.felix.ipojo.runtime.core.TestComplexConfigurations.testDynamism(TestComplexConfigurations.java:110)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
> 	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:67)
> 	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:37)
> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
> 	at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
> 	at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
> 	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.invokeViaJUnit(JUnitProbeInvoker.java:111)
> 	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:84)
> 	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:72)
> 	at org.ops4j.pax.exam.nat.internal.NativeTestContainer.call(NativeTestContainer.java:77)
> 	- locked <7f46282f0> (a org.ops4j.pax.exam.nat.internal.NativeTestContainer)
> 	at org.ops4j.pax.exam.spi.reactors.EagerSingleStagedReactor.invoke(EagerSingleStagedReactor.java:109)
> 	at org.ops4j.pax.exam.junit.PaxExam$2.evaluate(PaxExam.java:294)
> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
> 	at org.ops4j.pax.exam.junit.PaxExam.run(PaxExam.java:111)
> 	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
> 	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
> 	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208)
> 	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:159)
> 	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:87)
> 	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
> 	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:95)
> "VM Thread" prio=9 tid=7ff905138000 nid=0x1105ba000 runnable
> "Gang worker#0 (Parallel GC Threads)" prio=9 tid=7ff905000800 nid=0x10bc53000 runnable
> "Gang worker#1 (Parallel GC Threads)" prio=9 tid=7ff905001000 nid=0x10bd56000 runnable
> "Gang worker#2 (Parallel GC Threads)" prio=9 tid=7ff905002000 nid=0x10be59000 runnable
> "Gang worker#3 (Parallel GC Threads)" prio=9 tid=7ff905002800 nid=0x10bf5c000 runnable
> "Gang worker#4 (Parallel GC Threads)" prio=9 tid=7ff905003000 nid=0x10c05f000 runnable
> "Gang worker#5 (Parallel GC Threads)" prio=9 tid=7ff905003800 nid=0x10c162000 runnable
> "Gang worker#6 (Parallel GC Threads)" prio=9 tid=7ff905004800 nid=0x10c265000 runnable
> "Gang worker#7 (Parallel GC Threads)" prio=9 tid=7ff905005000 nid=0x10c368000 runnable
> "Concurrent Mark-Sweep GC Thread" prio=9 tid=7ff9050e2800 nid=0x110234000 runnable
> "Gang worker#0 (Parallel CMS Threads)" prio=9 tid=7ff9050e1000 nid=0x10f82e000 runnable
> "Gang worker#1 (Parallel CMS Threads)" prio=9 tid=7ff9050e1800 nid=0x10f931000 runnable
> "VM Periodic Task Thread" prio=10 tid=7ff90302c800 nid=0x110eda000 waiting on condition
> "Exception Catcher Thread" prio=10 tid=7ff906801800 nid=0x108a7a000 runnable
> JNI global references: 972
> Heap
>  par new generation   total 19136K, used 3371K [7f3000000, 7f44c0000, 7f44c0000)
>   eden space 17024K,  15% used [7f3000000, 7f329a638, 7f40a0000)
>   from space 2112K,  33% used [7f42b0000, 7f43605d0, 7f44c0000)
>   to   space 2112K,   0% used [7f40a0000, 7f40a0000, 7f42b0000)
>  concurrent mark-sweep generation total 63872K, used 2700K [7f44c0000, 7f8320000, 7fae00000)
>  concurrent-mark-sweep perm gen total 29084K, used 18052K [7fae00000, 7fca67000, 800000000)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira