JDK-6589714 : Incorrect synchronization in AppletClassLoader causes deadlock
  • Type: Bug
  • Component: deploy
  • Sub-Component: plugin
  • Affected Version: 6u4
  • Priority: P3
  • Status: Resolved
  • Resolution: Cannot Reproduce
  • OS: generic
  • CPU: generic
  • Submitted: 2007-08-06
  • Updated: 2015-09-17
  • Resolved: 2015-09-17
Related Reports
Relates :  
Description
Found one Java-level deadlock:
=============================
"AppletLauncher-Startup":
  waiting to lock monitor 0x0807ccac (object 0x8c79fa18, a sun.plugin.security.PluginClassLoader),
  which is held by "AppletLauncher-Reaper"
"AppletLauncher-Reaper":
  waiting to lock monitor 0x0807cb80 (object 0x8c79f9c8, a sun.misc.URLClassPath),
  which is held by "AppletLauncher-Startup"

Java stack information for the threads listed above:
===================================================
"AppletLauncher-Startup":
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at java.io.ObjectInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.access$300(Unknown Source)
        at com.sun.deploy.cache.CacheEntry$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.deploy.cache.CacheEntry.getJarFile(Unknown Source)
        at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
        at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
        at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
        at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
        at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
        at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
        - locked <0x8c8593a0> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
        - locked <0x8c8593a0> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
        at sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.access$600(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath$JarLoader.ensureOpen(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.<init>(Unknown Source)
        at sun.misc.URLClassPath$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        - locked <0x8c79f9c8> (a sun.misc.URLClassPath)
        at sun.misc.URLClassPath.findResource(Unknown Source)
        at java.net.URLClassLoader$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findResource(Unknown Source)
        at sun.applet.AppletClassLoader.findResource(Unknown Source)
        at java.lang.ClassLoader.getResource(Unknown Source)
        at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
        at sun.applet.AppletClassLoader.getResourceAsStream(Unknown Source)
        - locked <0x8c7b3a00> (a java.lang.Object)
        at javax.xml.parsers.SecuritySupport$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.xml.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
        at javax.xml.parsers.FactoryFinder.findJarServiceProvider(Unknown Source)
        at javax.xml.parsers.FactoryFinder.find(Unknown Source)
        at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
        at org.jdesktop.applet.util.JNLPAppletLauncher$JNLPParser.<clinit>(JNLPAppletLauncher.java:2153)
        at org.jdesktop.applet.util.JNLPAppletLauncher.parseJNLPExtensions(JNLPAppletLauncher.java:1993)
        at org.jdesktop.applet.util.JNLPAppletLauncher.initResources(JNLPAppletLauncher.java:1321)
        - locked <0x9030fdd0> (a java.lang.Class for org.jdesktop.applet.util.JNLPAppletLauncher)
        at org.jdesktop.applet.util.JNLPAppletLauncher.initAndStartApplet(JNLPAppletLauncher.java:1246)
        at org.jdesktop.applet.util.JNLPAppletLauncher.access$000(JNLPAppletLauncher.java:650)
        at org.jdesktop.applet.util.JNLPAppletLauncher$1.run(JNLPAppletLauncher.java:899)
"AppletLauncher-Reaper":
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        - waiting to lock <0x8c79f9c8> (a sun.misc.URLClassPath)
        at sun.misc.URLClassPath.getResource(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at sun.applet.AppletClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at sun.applet.AppletClassLoader.loadClass(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at org.jdesktop.applet.util.JNLPAppletLauncher.deleteOldTempDirs(JNLPAppletLauncher.java:1113)
        at org.jdesktop.applet.util.JNLPAppletLauncher.access$100(JNLPAppletLauncher.java:650)
        at org.jdesktop.applet.util.JNLPAppletLauncher$3.run(JNLPAppletLauncher.java:1073)

Found 1 deadlock.

Heap
 def new generation   total 960K, used 257K [0x8c070000, 0x8c170000, 0x8c550000)
  eden space 896K,  21% used [0x8c070000, 0x8c0a1188, 0x8c150000)
  from space 64K,  95% used [0x8c160000, 0x8c16f518, 0x8c170000)
  to   space 64K,   0% used [0x8c150000, 0x8c150000, 0x8c160000)
 tenured generation   total 4096K, used 4022K [0x8c550000, 0x8c950000, 0x90070000)
   the space 4096K,  98% used [0x8c550000, 0x8c93d9a0, 0x8c93da00, 0x8c950000)
 compacting perm gen  total 12288K, used 2899K [0x90070000, 0x90c70000, 0x94070000)
   the space 12288K,  23% used [0x90070000, 0x90344fb0, 0x90345000, 0x90c70000)
    ro space 8192K,  69% used [0x94070000, 0x945febc0, 0x945fec00, 0x94870000)
    rw space 12288K,  57% used [0x94870000, 0x94f5a488, 0x94f5a600, 0x95470000)
###@###.### indicates that there is a deadlock in the AppletClassLoader implementation due to incorrect synchronization. From an email from him:

-----
I got a deadlock on Linux-i586 (Ubunty Edgy) running the following applet in Firefox 2.0.0.6:

https://java3d.dev.java.net/applets/FourByFour.html

The output of the console log is below. A thread dump showing the deadlock is attached.

-- Kevin

Java Plug-in 1.6.0_04
Using JRE version 1.6.0_04 Java HotSpot(TM) Client VM
User home directory = /export/home/beethoven/kcr


----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------

JNLPAppletLauncher: static initializer
os.name = linux
nativePrefix = lib  nativeSuffix = .so
tmpRootDir = /tmp/jnlp-applet/jln34429
Applet.init
subapplet.classname = org.jdesktop.j3d.examples.four_by_four.FourByFour
subapplet.displayname = Java 3D Four by Four Applet
Applet.start







2007-08-02 11:29:39
Full thread dump Java HotSpot(TM) Client VM (1.6.0_01-b06 mixed mode, sharing):

"TimerQueue" daemon prio=10 tid=0x08354400 nid=0x5551 in Object.wait() [0xb43b6000..0xb43b6ee0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c893cd0> (a javax.swing.TimerQueue)
        at javax.swing.TimerQueue.run(Unknown Source)
        - locked <0x8c893cd0> (a javax.swing.TimerQueue)
        at java.lang.Thread.run(Unknown Source)

"AppletLauncher-Startup" prio=10 tid=0x08306000 nid=0x5550 waiting for monitor entry [0xb4963000..0xb4965e60]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at java.io.ObjectInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source)
        at com.sun.deploy.cache.CacheEntry.access$300(Unknown Source)
        at com.sun.deploy.cache.CacheEntry$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.deploy.cache.CacheEntry.getJarFile(Unknown Source)
        at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
        at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
        at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
        at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
        at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
        at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
        - locked <0x8c8593a0> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
        - locked <0x8c8593a0> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
        at sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.access$600(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath$JarLoader.ensureOpen(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.<init>(Unknown Source)
        at sun.misc.URLClassPath$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        - locked <0x8c79f9c8> (a sun.misc.URLClassPath)
        at sun.misc.URLClassPath.findResource(Unknown Source)
        at java.net.URLClassLoader$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findResource(Unknown Source)
        at sun.applet.AppletClassLoader.findResource(Unknown Source)
        at java.lang.ClassLoader.getResource(Unknown Source)
        at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
        at sun.applet.AppletClassLoader.getResourceAsStream(Unknown Source)
        - locked <0x8c7b3a00> (a java.lang.Object)
        at javax.xml.parsers.SecuritySupport$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.xml.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
        at javax.xml.parsers.FactoryFinder.findJarServiceProvider(Unknown Source)
        at javax.xml.parsers.FactoryFinder.find(Unknown Source)
        at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
        at org.jdesktop.applet.util.JNLPAppletLauncher$JNLPParser.<clinit>(JNLPAppletLauncher.java:2153)
        at org.jdesktop.applet.util.JNLPAppletLauncher.parseJNLPExtensions(JNLPAppletLauncher.java:1993)
        at org.jdesktop.applet.util.JNLPAppletLauncher.initResources(JNLPAppletLauncher.java:1321)
        - locked <0x9030fdd0> (a java.lang.Class for org.jdesktop.applet.util.JNLPAppletLauncher)
        at org.jdesktop.applet.util.JNLPAppletLauncher.initAndStartApplet(JNLPAppletLauncher.java:1246)
        at org.jdesktop.applet.util.JNLPAppletLauncher.access$000(JNLPAppletLauncher.java:650)
        at org.jdesktop.applet.util.JNLPAppletLauncher$1.run(JNLPAppletLauncher.java:899)

"AppletLauncher-Reaper" prio=10 tid=0x08335c00 nid=0x554f waiting for monitor entry [0xb442f000..0xb44301e0]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        - waiting to lock <0x8c79f9c8> (a sun.misc.URLClassPath)
        at sun.misc.URLClassPath.getResource(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at sun.applet.AppletClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at sun.applet.AppletClassLoader.loadClass(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        - locked <0x8c79fa18> (a sun.plugin.security.PluginClassLoader)
        at org.jdesktop.applet.util.JNLPAppletLauncher.deleteOldTempDirs(JNLPAppletLauncher.java:1113)
        at org.jdesktop.applet.util.JNLPAppletLauncher.access$100(JNLPAppletLauncher.java:650)
        at org.jdesktop.applet.util.JNLPAppletLauncher$3.run(JNLPAppletLauncher.java:1073)

"AWT-EventQueue-0" prio=10 tid=0x0830dc00 nid=0x5549 in Object.wait() [0xb44d1000..0xb44d20e0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c58c670> (a java.awt.EventQueue)
        at java.lang.Object.wait(Object.java:485)
        at java.awt.EventQueue.getNextEvent(Unknown Source)
        - locked <0x8c58c670> (a java.awt.EventQueue)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

"thread applet-org.jdesktop.applet.util.JNLPAppletLauncher" prio=10 tid=0x08302800 nid=0x5546 in Object.wait() [0xb4640000..0xb4640f60]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c626af8> (a sun.plugin.AppletViewer)
        at java.lang.Object.wait(Object.java:485)
        at sun.applet.AppletPanel.getNextEvent(Unknown Source)
        - locked <0x8c626af8> (a sun.plugin.AppletViewer)
        at sun.applet.AppletPanel.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-EventQueue-2" prio=10 tid=0xb486e400 nid=0x5544 in Object.wait() [0xb4adc000..0xb4adce60]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c79fc70> (a java.awt.EventQueue)
        at java.lang.Object.wait(Object.java:485)
        at java.awt.EventQueue.getNextEvent(Unknown Source)
        - locked <0x8c79fc70> (a java.awt.EventQueue)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

"Thread-3" prio=10 tid=0x082e3800 nid=0x5542 runnable [0xb4a3b000..0xb4a3b160]
   java.lang.Thread.State: RUNNABLE
        at sun.plugin.navig.motif.AThread.handleRequest(Native Method)
        at sun.plugin.navig.motif.AThread.JNIHandleLoop(Unknown Source)
        at sun.plugin.navig.motif.AThread.run(Unknown Source)

"Thread-2" prio=10 tid=0x082dcc00 nid=0x553f waiting on condition [0xb4a8b000..0xb4a8c0e0]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at sun.plugin.navig.motif.Plugin$Watcher.run(Unknown Source)

"ConsoleWriterThread" daemon prio=10 tid=0x081c3000 nid=0x553d in Object.wait() [0xb52b4000..0xb52b4fe0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5e9990> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:485)
        at com.sun.deploy.util.ConsoleTraceListener$ConsoleWriterThread.run(Unknown Source)
        - locked <0x8c5e9990> (a java.lang.Object)

"AWT-EventQueue-1" prio=10 tid=0x082b3400 nid=0x553c in Object.wait() [0xb4b2d000..0xb4b2df60]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5ea1a8> (a java.awt.EventQueue)
        at java.lang.Object.wait(Object.java:485)
        at java.awt.EventQueue.getNextEvent(Unknown Source)
        - locked <0x8c5ea1a8> (a java.awt.EventQueue)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

"AWT-Shutdown" prio=10 tid=0x082b2c00 nid=0x553b in Object.wait() [0xb5305000..0xb5305ee0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c561328> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:485)
        at sun.awt.AWTAutoShutdown.run(Unknown Source)
        - locked <0x8c561328> (a java.lang.Object)
        at java.lang.Thread.run(Unknown Source)

"traceMsgQueueThread" daemon prio=10 tid=0x08143400 nid=0x5538 in Object.wait() [0xb5356000..0xb5357160]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5eac68> (a java.util.ArrayList)
        at java.lang.Object.wait(Object.java:485)
        at com.sun.deploy.util.Trace$TraceMsgQueueChecker.run(Unknown Source)
        - locked <0x8c5eac68> (a java.util.ArrayList)
        at java.lang.Thread.run(Unknown Source)

"CacheCleanUpThread" daemon prio=10 tid=0x08142800 nid=0x5537 in Object.wait() [0xb53a7000..0xb53a80e0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5ea300> (a com.sun.deploy.cache.CleanupThread)
        at java.lang.Object.wait(Object.java:485)
        at com.sun.deploy.cache.CleanupThread.run(Unknown Source)
        - locked <0x8c5ea300> (a com.sun.deploy.cache.CleanupThread)

"AWT-XAWT" daemon prio=10 tid=0x0812cc00 nid=0x5534 runnable [0xb540f000..0xb5410060]
   java.lang.Thread.State: RUNNABLE
        at sun.awt.X11.XToolkit.waitForEvents(Native Method)
        at sun.awt.X11.XToolkit.run(Unknown Source)
        at sun.awt.X11.XToolkit.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"Java2D Disposer" daemon prio=10 tid=0x080e1c00 nid=0x5533 in Object.wait() [0xb5471000..0xb5471fe0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5a6f58> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x8c5a6f58> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at sun.java2d.Disposer.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"Low Memory Detector" daemon prio=10 tid=0x08086000 nid=0x5531 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x08084400 nid=0x5530 waiting on condition [0x00000000..0xb5b328f8]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x08083000 nid=0x552f runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x0807b400 nid=0x552e in Object.wait() [0xb5bd4000..0xb5bd5160]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5a7140> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x8c5a7140> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" daemon prio=10 tid=0x0807a400 nid=0x552d in Object.wait() [0xb5c25000..0xb5c260e0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8c5a6dd8> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
        - locked <0x8c5a6dd8> (a java.lang.ref.Reference$Lock)

"main" prio=10 tid=0x08052000 nid=0x552b runnable [0xbf8c0000..0xbf8c1058]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.read(Native Method)
        at java.io.DataInputStream.readInt(Unknown Source)
        at sun.plugin.navig.motif.Plugin.doit(Unknown Source)
        at sun.plugin.navig.motif.Plugin.start(Unknown Source)

"VM Thread" prio=10 tid=0x08070c00 nid=0x552c runnable 

"VM Periodic Task Thread" prio=10 tid=0x08087800 nid=0x5532 waiting on condition 

JNI global references: 1142

-----
(Deadlocks follow in next part)

Comments
Originally filed against old plugin (no longer supported), there is some evidence that this problem was seen with early versions of new plugin and early versions of javaFX, but no evidence is is reproducible with later releases (JDK8, JDK9). closing this as not reproducible.
17-09-2015

EVALUATION Attaching a JavaFX project which reproduces the hang 100% on my Windows XP system, when launched either via jnlp or applet (IE7). To reproduce: start dist/JavaFXBalls.jnlp (you will need to either fix the codebase or recompile the project). The key to reproducibility appears to be asynchronous Image loading in the benchmark (see JavaFXBalls.fx): var image = Image { url: imageURL backgroundLoading:true }; If backgroundLoading:true is removed, the hang doesn't reproduce as often. A typical deadlock stack trace: Name: Thread-10 State: BLOCKED on sun.plugin2.applet.JNLP2ClassLoader@e576d4 owned by: AWT-EventQueue-3 Total blocked: 7 Total waited: 2 Stack trace: java.lang.Class.forName0(Native Method) java.lang.Class.forName(Unknown Source) java.io.ObjectInputStream.resolveClass(Unknown Source) java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) java.io.ObjectInputStream.readClassDesc(Unknown Source) java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) java.io.ObjectInputStream.readObject0(Unknown Source) java.io.ObjectInputStream.readObject(Unknown Source) com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source) com.sun.deploy.cache.CacheEntry.readManifest(Unknown Source) com.sun.deploy.cache.CacheEntry.getCodeSigners(Unknown Source) com.sun.deploy.cache.CachedJarFile.<init>(Unknown Source) com.sun.deploy.cache.CacheEntry$2.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) com.sun.deploy.cache.CacheEntry.getJarFile(Unknown Source) com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source) com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source) sun.plugin.PluginURLJarFileCallBack$2.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source) sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source) sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source) sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source) sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source) sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source) sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source) - locked sun.plugin.net.protocol.jar.CachedJarURLConnection@36b1bb sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source) - locked sun.plugin.net.protocol.jar.CachedJarURLConnection@36b1bb sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source) sun.misc.URLClassPath$JarLoader.access$600(Unknown Source) sun.misc.URLClassPath$JarLoader$1.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) sun.misc.URLClassPath$JarLoader.ensureOpen(Unknown Source) sun.misc.URLClassPath$JarLoader.<init>(Unknown Source) sun.misc.URLClassPath$3.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) sun.misc.URLClassPath.getLoader(Unknown Source) sun.misc.URLClassPath.getLoader(Unknown Source) - locked sun.misc.URLClassPath@1262bf4 sun.misc.URLClassPath.access$000(Unknown Source) sun.misc.URLClassPath$1.next(Unknown Source) sun.misc.URLClassPath$1.hasMoreElements(Unknown Source) java.net.URLClassLoader$3$1.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader$3.next(Unknown Source) java.net.URLClassLoader$3.hasMoreElements(Unknown Source) sun.misc.CompoundEnumeration.next(Unknown Source) sun.misc.CompoundEnumeration.hasMoreElements(Unknown Source) sun.misc.Service$LazyIterator.hasNext(Unknown Source) javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(Unknown Source) javax.imageio.spi.IIORegistry.<init>(Unknown Source) javax.imageio.spi.IIORegistry.getDefaultInstance(Unknown Source) javax.imageio.ImageIO.<clinit>(Unknown Source) com.sun.javafx.scene.image.ImageLoader.readImageFromStream(Unknown Source) com.sun.javafx.scene.image.ImageLoader.<init>(Unknown Source) com.sun.javafx.scene.image.ImageLoader$AysncImageLoader.processStream(Unknown Source) com.sun.javafx.scene.image.ImageLoader$AysncImageLoader.processStream(Unknown Source) com.sun.javafx.runtime.async.AbstractRemoteResource.call(Unknown Source) com.sun.javafx.runtime.async.AbstractAsyncOperation$1.call(Unknown Source) java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) java.util.concurrent.FutureTask.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) Name: AWT-EventQueue-3 State: BLOCKED on sun.misc.URLClassPath@1262bf4 owned by: Thread-10 Total blocked: 20 Total waited: 4 Stack trace: sun.misc.URLClassPath.getLoader(Unknown Source) sun.misc.URLClassPath.getResource(Unknown Source) sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source) sun.plugin2.applet.JNLP2ClassLoader.findClass(Unknown Source) java.lang.ClassLoader.loadClass(Unknown Source) - locked sun.plugin2.applet.JNLP2ClassLoader@e576d4 java.lang.ClassLoader.loadClass(Unknown Source) java.lang.ClassLoader.loadClassInternal(Unknown Source) - locked sun.plugin2.applet.JNLP2ClassLoader@e576d4 javafx.scene.Node.addTriggers$(Unknown Source) javafx.scene.shape.Shape.addTriggers$(Unknown Source) javafx.scene.shape.Circle.addTriggers$(Unknown Source) javafx.scene.shape.Circle.initialize$(Unknown Source) javafxballs.JavaFXBalls$BallsTest.create2DBall$impl(JavaFXBalls.fx:85) javafxballs.JavaFXBalls$BallsTest.create2DBall(JavaFXBalls.fx:64) javafxballs.JavaFXBalls$BallsTest.resetBalls$impl(JavaFXBalls.fx:223) javafxballs.JavaFXBalls$BallsTest.resetBalls(JavaFXBalls.fx:64) javafxballs.JavaFXBalls$BallsTest$7.onChange(JavaFXBalls.fx:229) com.sun.javafx.runtime.location.IntVariable$4.action(Unknown Source) com.sun.javafx.runtime.location.IntVariable$4.action(Unknown Source) com.sun.javafx.runtime.util.AbstractLinkable.iterate(Unknown Source) com.sun.javafx.runtime.location.IntVariable.notifyListeners(Unknown Source) com.sun.javafx.runtime.location.IntVariable.replaceValue(Unknown Source) com.sun.javafx.runtime.location.IntVariable.setAsInt(Unknown Source) javafxballs.JavaFXBalls$BallsTest.applyDefaults$javafxballs$JavaFXBalls$BallsTest$_N(JavaFXBalls.fx:229) javafxballs.JavaFXBalls$BallsTest.initialize$(JavaFXBalls.fx:229) javafxballs.JavaFXBalls.javafx$run$(JavaFXBalls.fx:290) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.sun.javafx.runtime.adapter.Applet.launchStage(Unknown Source) com.sun.javafx.runtime.adapter.Applet$1.lambda(Unknown Source) com.sun.javafx.runtime.adapter.Applet$1.invoke(Unknown Source) com.sun.javafx.runtime.adapter.Applet$1.invoke(Unknown Source) com.sun.javafx.runtime.Entry$2.run(Unknown Source) java.awt.event.InvocationEvent.dispatch(Unknown Source) java.awt.EventQueue.dispatchEvent(Unknown Source) java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.run(Unknown Source)
17-12-2008

EVALUATION Via code inspection, the problem is still there in the new plug-in's Applet2ClassLoader. This problem occurs very rarely but it is understood how to make it correct. Early in the next update release the fix should be made and the product monitored very carefully during the update release cycle for any performance or other regressions.
23-05-2008

EVALUATION Trying to reproduce on Linux with FF3 + OOPP _AND_ FF3 old-plugin. It just works.
23-05-2008

SUGGESTED FIX Make AppletClassLoader.getResourceAsStream() synchronized to obey the implicit locking protocol associated with class loading (as shown in the AppletLauncher-Reaper thread), where the JVM locks the ClassLoader before calling in to it for loading a class.
06-08-2007