| Hello Felix developer community, I am having an interesting (and critical) problem running my application with Felix in an embedded environment where an alternate JVM, JamVM is necessary. The deadlock is non-deterministic with the deadlocked stack traces blocking at odd places (though they might not seem odd to people used to messing with class loading - but a block on new XXX() to me is quite the novelty). An example of the relevant parts of the thread stack is in FelixJamVMDeadlockStackTrace.txt, attached. It shows a lock between:
Gogo and Retrotranslator are red herrings, without them in the application the deadlock just happens somewhere else. I don't even vaguely understand how, but neither Eclipse nor Knopflerfish suffer from this problem. I would, however, much rather use Felix. Please let me know if there's any further information I can provide. Best, Dan. |
"Gogo shell" (daemon) 0x7fdd84267600 priority: 5 tid: 0x7fdd8b5fc700 id: 8
state: BLOCKED (5)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2038)
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:293)
at
net.sf.retrotranslator.runtime.impl.WeakIdentityTable.obtain(WeakIdentityTable.java:53)
at net.sf.retrotranslator.runtime.java.lang.Enum_.<init>(Enum_.java:62)
at
org.apache.felix.gogo.runtime.Tokenizer$Type.<init>(Tokenizer.java:58)
at
org.apache.felix.gogo.runtime.Tokenizer$Type.<clinit>(Tokenizer.java:49)
at org.apache.felix.gogo.runtime.Tokenizer.<init>(Tokenizer.java:77)
at org.apache.felix.gogo.runtime.Tokenizer.<init>(Tokenizer.java:89)
at org.apache.felix.gogo.runtime.Parser.<init>(Parser.java:35)
at org.apache.felix.gogo.runtime.Closure.<init>(Closure.java:61)
at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:88)
at org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
at java.lang.Thread.run(Thread.java:745)
"Amqp Reconnection" (daemon) 0x7fdd841d7470 priority: 5 tid: 0x7fdd8bdfd700 id:
7 state: BLOCKED (5)
at
net.sf.retrotranslator.runtime.asm.ClassReader.readConst(ClassReader.java:1591)
at
net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:536)
at
net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:300)
at
net.sf.retrotranslator.runtime.impl.ClassDescriptor.<init>(ClassDescriptor.java:67)
at
net.sf.retrotranslator.runtime.impl.ClassDescriptor.getInstance(ClassDescriptor.java:86)
at
net.sf.retrotranslator.runtime.java.lang._Class.getEnclosingClass(_Class.java:126)
at
net.sf.retrotranslator.runtime.java.lang._Class.getSimpleName(_Class.java:171)
at
com.redbite.rededge.amqp.RedEdgeConnectionFactory.toString(RedEdgeConnectionFactory.java:40)
at java.lang.String.valueOf(String.java:1832)
at java.lang.AbstractStringBuffer.append(AbstractStringBuffer.java:283)
at java.lang.StringBuffer.append(StringBuffer.java:293)
at com.redbite.rededge.amqp.Activator$2.getService(Activator.java:46)
at com.redbite.rededge.amqp.Activator$2.getService(Activator.java:42)
at
com.redbite.rededge.amqp.Activator.tryToGetAChannel(Activator.java:86)
at com.redbite.rededge.amqp.Activator$3.run(Activator.java:58)
at
edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.runAndReset(FutureTask.java:200)
at
edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:151)
at
edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:263)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:745)
"FelixStartLevel" (daemon) 0x17df4f0 priority: 5 tid: 0x7fdd909c9700 id: 6
state: BLOCKED (5)
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:580)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1948)
at java.lang.ClassLoader.loadClass(ClassLoader.java:293)
at
org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1374)
at
org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1630)
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1511)
at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:293)
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.<clinit>(AbstractComponentManager.java:225)
at
org.apache.felix.scr.impl.config.ImmediateComponentHolder.createComponentManager(ImmediateComponentHolder.java:130)
at
org.apache.felix.scr.impl.config.ImmediateComponentHolder.<init>(ImmediateComponentHolder.java:116)
at
org.apache.felix.scr.impl.ComponentRegistry.createComponentHolder(ComponentRegistry.java:546)
at
org.apache.felix.scr.impl.BundleComponentActivator.loadDescriptor(BundleComponentActivator.java:247)
at
org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:149)
at
org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:113)
at
org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:261)
at
org.apache.felix.scr.impl.Activator.loadAllComponents(Activator.java:199)
at org.apache.felix.scr.impl.Activator.start(Activator.java:108)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2146)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
at
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
at java.lang.Thread.run(Thread.java:745)
