by loftar » Tue May 25, 2010 2:42 am
I finally had what I think is this bug happen to myself, so now I've finally got some info on it.
It appears that one of the resource loader threads and the main thread deadlock on each other somewhere deep inside the JNLP client code. I haven't analyzed it in detail yet, but let me post the stack traces of the locked threads both for the sake of noting them to myself and giving the information to someone else who might want to try solving it.
Resource loader:
- Code: Select all
Name: Haven resource loader
State: BLOCKED on com.sun.jnlp.JNLPClassLoader@11756a4 owned by: Haven main thread
Total blocked: 2 Total waited: 0
Stack trace:
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:247)
java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
com.sun.deploy.cache.CacheEntry$12.run(CacheEntry.java:1978)
java.security.AccessController.doPrivileged(Native Method)
com.sun.deploy.cache.CacheEntry.readSigners(CacheEntry.java:1943)
com.sun.deploy.cache.CacheEntry.getCodeSourceCache(CacheEntry.java:1104)
com.sun.deploy.cache.CacheEntry.getCodeSources(CacheEntry.java:1179)
com.sun.deploy.cache.CachedJarFile.getCodeSources(CachedJarFile.java:634)
com.sun.deploy.cache.DeployCacheJarAccessImpl.getCodeSources(DeployCacheJarAccessImpl.java:56)
com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(CPCallbackHandler.java:139)
- locked com.sun.deploy.security.CPCallbackHandler$ParentCallback@2ee7e5
com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(DeployURLClassPath.java:744)
com.sun.deploy.security.DeployURLClassPath$JarLoader.access$700(DeployURLClassPath.java:625)
com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(DeployURLClassPath.java:692)
java.security.AccessController.doPrivileged(Native Method)
com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(DeployURLClassPath.java:684)
com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(DeployURLClassPath.java:646)
com.sun.deploy.security.DeployURLClassPath$3.run(DeployURLClassPath.java:400)
java.security.AccessController.doPrivileged(Native Method)
com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:389)
com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:366)
- locked com.sun.deploy.security.DeployURLClassPath@510dc2
com.sun.deploy.security.DeployURLClassPath.access$100(DeployURLClassPath.java:69)
com.sun.deploy.security.DeployURLClassPath$1.next(DeployURLClassPath.java:257)
com.sun.deploy.security.DeployURLClassPath$1.hasMoreElements(DeployURLClassPath.java:269)
java.net.URLClassLoader$3$1.run(URLClassLoader.java:416)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader$3.next(URLClassLoader.java:413)
java.net.URLClassLoader$3.hasMoreElements(URLClassLoader.java:438)
sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:27)
sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:36)
sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:27)
sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:36)
sun.misc.Service$LazyIterator.hasNext(Service.java:255)
javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(IIORegistry.java:188)
javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:121)
javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:142)
javax.imageio.ImageIO.<clinit>(ImageIO.java:48)
haven.Resource$Image.<init>(Resource.java:474)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
haven.Resource.load(Resource.java:1014)
haven.Resource.access$300(Resource.java:39)
haven.Resource$Loader.handle(Resource.java:396)
haven.Resource$Loader.run(Resource.java:375)
- locked haven.Resource@328c40
java.lang.Thread.run(Thread.java:619)
Main thread:
- Code: Select all
Name: Haven main thread
State: BLOCKED on com.sun.deploy.security.DeployURLClassPath@510dc2 owned by: Haven resource loader
Total blocked: 3 Total waited: 1
Stack trace:
com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:343)
com.sun.deploy.security.DeployURLClassPath.getResource(DeployURLClassPath.java:230)
java.net.URLClassLoader$1.run(URLClassLoader.java:194)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:332)
java.lang.ClassLoader.loadClass(ClassLoader.java:307)
- locked com.sun.jnlp.JNLPClassLoader@13936e1
java.lang.ClassLoader.loadClass(ClassLoader.java:296)
- locked com.sun.jnlp.JNLPClassLoader@11756a4
java.lang.ClassLoader.loadClass(ClassLoader.java:248)
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
java.lang.Class.getDeclaredMethod(Class.java:1935)
java.awt.Component.isCoalesceEventsOverriden(Component.java:5948)
java.awt.Component.access$500(Component.java:169)
java.awt.Component$3.run(Component.java:5902)
java.awt.Component$3.run(Component.java:5900)
java.security.AccessController.doPrivileged(Native Method)
java.awt.Component.checkCoalescing(Component.java:5899)
- locked java.util.WeakHashMap@95ef17
java.awt.Component.<init>(Component.java:5868)
java.awt.Canvas.<init>(Canvas.java:40)
javax.media.opengl.GLCanvas.<init>(GLCanvas.java:127)
javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90)
haven.HavenPanel.<init>(HavenPanel.java:63)
haven.MainFrame.<init>(MainFrame.java:120)
haven.MainFrame.main2(MainFrame.java:209)
haven.MainFrame.access$100(MainFrame.java:34)
haven.MainFrame$5.run(MainFrame.java:262)
java.lang.Thread.run(Thread.java:619)
"Object-oriented design is the roman numerals of computing." -- Rob Pike