JDK-6949712 : regression: deadlock in JNLP2ClassLoader
  • Type: Bug
  • Component: deploy
  • Sub-Component: plugin
  • Affected Version: 6u19
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: windows
  • CPU: x86
  • Submitted: 2010-05-05
  • Updated: 2010-09-08
  • Resolved: 2010-06-19
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6
6u21 b05Fixed
Related Reports
Relates :  
Description
Load this applet, reload browser a few times, sometimes you will get a deadlock and applet won't be displayed:

http://spbweb.russia.sun.com/~in81039/custom/Reversi2/reversi2.html


Found one Java-level deadlock:
=============================
"JFXIC-Ping Thread":
  waiting to lock monitor 0x033b23f4 (object 0x236214f8, a sun.plugin2.applet.JNLP2ClassLoader),
  which is held by "AWT-EventQueue-6"
"AWT-EventQueue-6":
  waiting to lock monitor 0x0c94359c (object 0x236215b8, a sun.plugin2.applet.JNLP2ClassLoader),
  which is held by "Thread-29"
"Thread-29":
  waiting to lock monitor 0x033b23f4 (object 0x236214f8, a sun.plugin2.applet.JNLP2ClassLoader),
  which is held by "AWT-EventQueue-6"

Java stack information for the threads listed above:
===================================================
"JFXIC-Ping Thread":
	at com.sun.javafx.eula.Ping.getVisitorID(Unknown Source)
	at com.sun.javafx.eula.Ping.access$000(Unknown Source)
	at com.sun.javafx.eula.Ping$1.run(Unknown Source)
"AWT-EventQueue-6":
	at java.lang.ClassLoader.loadClass(Unknown Source)
	- waiting to lock <0x236215b8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.JNLP2ClassLoader.findClass(JNLP2ClassLoader.java:340)
	- locked <0x236214f8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	- locked <0x236214f8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at com.sun.javafx.runtime.adapter.AppletStartupRoutine.run(Unknown Source)
	at com.sun.javafx.tk.swing.SwingToolkit$StartupRoutine.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	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-29":
	at java.lang.ClassLoader.loadClass(Unknown Source)
	- waiting to lock <0x236214f8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	- locked <0x236215b8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(Unknown Source)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.defineClassHelper(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.access$100(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
	at sun.plugin2.applet.JNLP2ClassLoader.findClass(JNLP2ClassLoader.java:320)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	- locked <0x236215b8> (a sun.plugin2.applet.JNLP2ClassLoader)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.JNLP2Manager$4.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Found 1 deadlock.

Comments
EVALUATION I have tested using the latest JRE 6u21 nightly build, I can't reproduce the hanging.
11-05-2010

EVALUATION this seems to be related to the following code in JNLP2Classloader: synchronized (this) { // redundant? if (!processingException && needToApplyWorkaround() && _delegatingClassLoader != null) { // workaround to allow runtime JARs and applet JARs to be // loaded by different class loader processingException = true; try { /* We guard against endless recursion but could, * in theory, still face deadlock by locking out of the * normal hierarchical order. The risk of deadlock appears * low in this narrow case. This is a temporary workaround * that should be removed soon. */ return _delegatingClassLoader.loadClass(name); } finally { processingException = false; } } } Is the first synchronzied(this) really needed ?
05-05-2010