JDK-8162342 : Deadlock involving JNLPClassLoader
  • Type: Bug
  • Component: deploy
  • Sub-Component: webstart
  • Affected Version: 8u102
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows
  • Submitted: 2016-07-21
  • Updated: 2016-08-09
  • Resolved: 2016-08-09
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
JRE 8u102 b14

ADDITIONAL OS VERSION INFORMATION :
MS Windows 10 OS

A DESCRIPTION OF THE PROBLEM :
The deadlock between locks on an instance of "com.sun.jnlp.JNLPClassLoader" class and a thread context class loader occurs during execution of Java Web Start application starting from JRE 8u102.

ERROR MESSAGES/STACK TRACES THAT OCCUR :

---------- Call stacks of 2 threads blocking each other ----------
Found one Java-level deadlock:
=============================
"<APPLICATION_THREAD>":
  waiting to lock monitor 0x45dda9ec (object 0x1ae44d00, a com.sun.jnlp.JNLPClassLoader),
  which is held by "javawsApplicationMain"
"javawsApplicationMain":
  waiting to lock monitor 0x45ddb23c (object 0x1af0bc80, a com.sun.jnlp.JNLPClassLoader),
  which is held by "<APPLICATION_THREAD>"

Java stack information for the threads listed above:
===================================================
"<APPLICATION_THREAD>":
        at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
        - waiting to lock <0x1ae44d00> (a com.sun.jnlp.JNLPClassLoader)
        at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
        at java.net.URLClassLoader$1.run(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 com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - locked <0x1af0bc80> (a com.sun.jnlp.JNLPClassLoader)
        at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor$ActionProcessorSysBean.getSysBeanAttributes(AbstractActionProcessor.java:790)
        at <APPLICATION_PACKAGE>.SysBeanAdapter.<init>(SysBeanAdapter.java:37)
        at <APPLICATION_PACKAGE>.SysBeanAdapterRegistry.addMBean(SysBeanAdapterRegistry.java:65)
        at <APPLICATION_PACKAGE>.SysBeanAdapterRegistry.add(SysBeanAdapterRegistry.java:35)
        at <APPLICATION_PACKAGE>.SysBeanAdapterRegistry.add(SysBeanAdapterRegistry.java:15)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor.registerRegistry(AbstractActionProcessor.java:153)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor.access$2300(AbstractActionProcessor.java:37)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor$RegisterProcess.register(AbstractActionProcessor.java:1483)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor$RegisterProcess.start(AbstractActionProcessor.java:1376)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor.doProcess(AbstractActionProcessor.java:435)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor.access$600(AbstractActionProcessor.java:37)
        at <APPLICATION_PACKAGE>.AbstractActionProcessor$2.execute(AbstractActionProcessor.java:588)
        at <APPLICATION_PACKAGE>.ExecutorScheduler$ExecuteCommand.run(ExecutorScheduler.java:123)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
"javawsApplicationMain":
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - waiting to lock <0x1af0bc80> (a com.sun.jnlp.JNLPClassLoader)
        at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - locked <0x1ae44d00> (a com.sun.jnlp.JNLPClassLoader)
        at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at javax.swing.SwingUtilities.loadSystemClass(Unknown Source)
        at javax.swing.UIDefaults.getUIClass(Unknown Source)
        at javax.swing.UIDefaults.getUI(Unknown Source)
        at javax.swing.UIManager.getUI(Unknown Source)
        at javax.swing.JPopupMenu.updateUI(Unknown Source)
        at javax.swing.JPopupMenu.<init>(Unknown Source)
        at javax.swing.JPopupMenu.<init>(Unknown Source)
        at javax.swing.plaf.basic.BasicComboPopup.<init>(Unknown Source)
        at javax.swing.plaf.basic.BasicComboBoxUI.createPopup(Unknown Source)
        at javax.swing.plaf.metal.MetalComboBoxUI.createPopup(Unknown Source)
        at javax.swing.plaf.basic.BasicComboBoxUI.installUI(Unknown Source)
        at javax.swing.JComponent.setUI(Unknown Source)
        at javax.swing.JComboBox.setUI(Unknown Source)
        at javax.swing.JComboBox.updateUI(Unknown Source)
        at javax.swing.JComboBox.init(Unknown Source)
        at javax.swing.JComboBox.<init>(Unknown Source)
        at <APPLICATION_PACKAGE>.GuiUtil.<clinit>(GuiUtil.java:51)
        at <APPLICATION_PACKAGE>.JavaClient.<init>(JavaClient.java:274)
        at <APPLICATION_PACKAGE>.JavaClient.main(JavaClient.java:541)
        at <APPLICATION_PACKAGE>.CMSExplorer.main(CMSExplorer.java:9)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at <APPLICATION_PACKAGE>.Start.invokeStaticMethod(Start.java:111)
        at <APPLICATION_PACKAGE>.Start.main(Start.java:39)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javaws.Launcher.executeApplication(Unknown Source)
        at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
        at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
        at com.sun.javaws.Launcher.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Comments
The deadlock was reproduced using the user's test case on MS Windows 7 OS with JRE 8u102 b14. The provided thread dumps were analyzed. Though call stacks of blocked threads in this bug are different from call stacks of blocked threads in the bug JDK-8161700, the deadlocks in both bugs occur because of the same fix and partially in the same place. It was verified in a local environment that the created fix for the bug JDK-8161700 resolves this bug. Closing the bug as a duplicate of JDK-8161700.
09-08-2016