Mercurial > hg > release > icedtea-web-1.4
view tests/reproducers/custom/JNLPClassLoaderDeadlock/srcs/JNLPClassLoaderDeadlock_1.java @ 762:29c1c1f92e09
Resolve multiple-applet deadlock issue in JNLPClassLoader
New lock used for synchronizing JNLPClassLoader#loadClass(String) to avoid
deadlock condition when multiple applets are being loaded simultaneously.
Regression test included.
* netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java: (loadClassLock)
private member for locking of loadClass method. (loadClass) synchronizes
using new lock rather than instance intrinsic lock to avoid RH976833
deadlock
* tests/reproducers/custom/JNLPClassLoaderDeadlock/testcases/JNLPClassLoaderDeadlockTest.java:
new test for multiple applet deadlock condition
* tests/reproducers/custom/JNLPClassLoaderDeadlock/resources/JNLPClassLoaderDeadlock.html:
same
* tests/reproducers/custom/JNLPClassLoaderDeadlock/srcs/JNLPClassLoaderDeadlock_1.java:
same
* tests/reproducers/custom/JNLPClassLoaderDeadlock/srcs/JNLPClassLoaderDeadlock_2.java:
same
* tests/reproducers/custom/JNLPClassLoaderDeadlock/srcs/Makefile: same
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Thu, 17 Oct 2013 11:09:51 -0400 |
parents | |
children |
line wrap: on
line source
import java.applet.Applet; import java.awt.*; public class JNLPClassLoaderDeadlock_1 extends Applet { @Override public void init() { System.out.println("JNLPClassLoaderDeadlock_1 applet initialized"); final String version = System.getProperty("java.version") + " (" + System.getProperty("java.vm.version") + ")"; final String vendor = System.getProperty("java.vendor"); final TextField tf = new TextField(40); tf.setText(version + " -- " + vendor); tf.setEditable(false); tf.setBackground(Color.white); setBackground(Color.white); add(tf); System.out.println("JNLPClassLoaderDeadlock_1 applet finished"); System.out.println("*** APPLET FINISHED ***"); } public static void main(String[] args) { new JNLPClassLoaderDeadlock_1().init(); } }