United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-8016225 : The behavior after System.exit() is different between JRE 1.7_21 and JRE 1.7_17

Details
Type:
Bug
Submit Date:
2013-06-10
Status:
Resolved
Updated Date:
2014-02-12
Project Name:
JDK
Resolved Date:
2013-06-26
Component:
deploy
OS:
windows_7
Sub-Component:
plugin
CPU:
Priority:
P3
Resolution:
Fixed
Affected Versions:
7u21
Fixed Versions:

Related Reports
Backport:
Backport:
Backport:
Backport:
Backport:

Sub Tasks

Description
Steps to reproduce
1. Access : http://vm53.sg.oracle.com/httpclient/WebContents/index.html
2. Click "Open Window". Then you will see the new browser window.
3. Check "System.exit" and click "Close". Then the new browser will be
closed.
4. Click "Open Window" again.   You will see the new browser, but the child
process will not be started.  Nothing appear in this new browser window.
NOTE: If you wait for about 1 min after step (3) before proceed to step (4),
this issue does not occur.
                                    

Comments
SQE-OK to get this issue fix for 7u40 
                                     
2013-06-28
??062013 - Checking status/plan with Alex/Dmitry

                                     
2013-06-20
According to the current design an initial JVM is launched by JVMLauncher, and the second JVM, which is running an applet, is launched by RemoteJVMLauncher invoked via ProxyJVMLauncher. If the second JVM process is terminated by some reasons, (e.g. running applet executes System.exit()), the WorkerThread for the corresponding JVMInstance and the pipe are terminated, but nobody is notified about this and the JVMInstance remains in the active list of JVMManager. So if we try to start the same applet with the same JVM parameters again, JVMManager tries to re-use the old JVMInstance. The JVMInstance will fail to send StartAppletMessage since the pipe does not exist.

Fix:
When a WorkerThread for a JVMInstance is terminated, we have to destroy the corresponding ProxyJVMLauncher, if any. Also if ProxyJVMLauncher.destroy() is executed and a pipe conversation between ProxyJVMLauncher and RemoteJVMLauncher is over, ProxyJVMLauncher will set the exit indicator. This will prevent the future usage of the terminated JVMInstance.
                                     
2013-06-14
bugdb indicates regression from 7u17 to 7u21
                                     
2013-06-14



Hardware and Software, Engineered to Work Together