Clement Escoffier created FELIX-4123:
----------------------------------------
Summary: 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