Tim, I agree, we shouldn't kill entire process. Unfortunately, it is how current implementation does. Actually, shutdown process is a weak place of DRLVM and needs deep refactoring. I will try to figure out what we can do as a short term solution.
Evgueni On 10/30/06, Tim Ellison <[EMAIL PROTECTED]> wrote:
Evgueni Brevnov wrote: > BTW, here is two more interesting cases > > 1) Throw uncaught exception in a new thread. Both RI and DRLVM give 0 > in that case. > 2) Call System.exit(123) in a new thread. Both RI and DRLVM give 123. > > Currently, DRLVM calls system _exit() at the end of System.exit(). > That's why DestroyJavaVM never returns. So the changes I proposed for > the launcher do not help until DRLVM forcibly terminates the process. > :-( > > Does IBMVME uses system calls to stop the proccess? Does DestroyJavaVM > returns? You cannot kill the entire process when destroying the VM. Apps that embed the VM will have a nasty surprise. Regards, Tim > On 10/30/06, Evgueni Brevnov <[EMAIL PROTECTED]> wrote: >> It seems we need to fix the launcher... which is common part for both >> DRLVM and IBVME. I see the problem in the following code sequence... >> >> <snip> >> (*jvm)->DetachCurrentThread(jvm); >> (*jvm)->DestroyJavaVM (jvm); >> </snip> >> >> The current thread has an uncaught exception raised before it calls >> DetachCurrentThread. This exception is printed out by default uncaught >> exception handler which is called upon thread detaching. So after >> DetachCurrentThread completes we have no exception anymore... Moreover >> we can not play with DetachCurrentThread and DestroyJavaVM return code >> since it should not depend on uncaught exceptions. So I think the fix >> should look like the following: >> >> <snip> >> if (env->ExceptionOccured) { >> rc = 1; >> } >> (*jvm)->DetachCurrentThread(jvm); >> (*jvm)->DestroyJavaVM (jvm); >> return rc; >> </snip> >> >> If there are no objections I'll come up with the patch soon... >> >> Thanks >> Evgueni >> On 10/30/06, Evgueni Brevnov <[EMAIL PROTECTED]> wrote: >> > I'll try to see how to fix it for DRLVM >> > >> > Evgueni >> > >> > On 10/30/06, Evgueni Brevnov <[EMAIL PROTECTED]> wrote: >> > > hmmm.... I got 0 for DRLVM on Win2003 >> > > >> > > Evgueni >> > > >> > > On 10/30/06, Spark Shen <[EMAIL PROTECTED]> wrote: >> > > > Then we may need to follow RI, since different error code fails >> application >> > > > >> > > > Best regards >> > > > Tony Wu ??: >> > > > > Consider this class, >> > > > > public class TestExeReturn { >> > > > > public static void main(String[] args) throws Exception { >> > > > > throw new Exception(); >> > > > > } >> > > > > } >> > > > > >> > > > > when we run "java TestExeReturn" and "echo %errorlevel%", we >> got 1 of >> > > > > RI, -1 of DRLVM and 0 for IBMVM. >> > > > > >> > > > > a testcase of apache ant failed for this issue. >> > > > > >> > > > >> > > > >> > > > -- >> > > > Spark Shen >> > > > China Software Development Lab, IBM >> > > > >> > > > >> > > >> > >> > -- Tim Ellison ([EMAIL PROTECTED])