diff options
author | Deepak Bhole <[email protected]> | 2011-05-27 17:03:25 -0400 |
---|---|---|
committer | Deepak Bhole <[email protected]> | 2011-05-27 17:03:25 -0400 |
commit | 2a1e9cdc0b595cc4e014f089e5d20bb51a07906f (patch) | |
tree | 088476949ffa1c6d780772301eeb6585561ed8a1 /plugin | |
parent | c571fe4ca9753affefee9be384868630b24a479f (diff) |
Backed out 0256de6a4bf6 as it is prone to race conditions.
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/icedteanp/java/sun/applet/PluginAppletViewer.java | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java b/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java index cc1f716..d974ca9 100644 --- a/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java +++ b/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java @@ -1621,26 +1621,15 @@ public class PluginAppletViewer extends XEmbeddedFrame if (cl instanceof JNLPClassLoader.CodeBaseClassLoader) cl = ((JNLPClassLoader.CodeBaseClassLoader) cl).getParentJNLPClassLoader(); + ThreadGroup tg = ((JNLPClassLoader) cl).getApplication().getThreadGroup(); + appletShutdown(p); appletPanels.removeElement(p); - - /* TODO: Applets don't always shut down nicely. We - * need to find a proper way to forcibly closing all threads - * an applet starts during its lifetime - */ + dispose(); - try { - SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - dispose(); - } - }); - } catch (Exception e) { // ignore, we are just disposing it - } + if (tg.activeCount() > 0) + tg.stop(); - // If there are no more applets running, exit the VM - // TODO: There is a possible race condition here as count - // can be 0 when an applet is in the initialization phase if (countApplets() == 0) { appletSystemExit(); } @@ -1651,10 +1640,12 @@ public class PluginAppletViewer extends XEmbeddedFrame } /** - * This function should be called to halt the VM when all applets are destroyed. + * Exit the program. + * Exit from the program (if not stand alone) - do no clean-up */ private void appletSystemExit() { - System.exit(0); + // Do nothing. Exit is handled by another + // block of code, called when _all_ applets are gone } /** |