My experiments show that System.exit() terminate the whole process on
RI not only running VM. Do we all agree this is how it should work?
Does this affect embedded VMs in a negative way?

Evgueni.

On 10/30/06, Alexey Varlamov <[EMAIL PROTECTED]> wrote:
2006/10/30, Evgueni Brevnov <[EMAIL PROTECTED]>:
> Hi,
>
> https://issues.apache.org/jira/browse/HARMONY-2006 is created with
> patches :-). I created two separate patches one for DRLVM another one
> for Classlib. I don't know if IBMVME requires additional changes. Even
> though DestroyJavaVM will not terminate the whole process now it still
> doesn't clean up resources properly. I'm going to focus on that
> problem...but it seems to take much more than one day :-)
>
> Thanks
> Evgueni.
>
> On 10/30/06, Evgueni Brevnov <[EMAIL PROTECTED]> wrote:
> > 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.
Interesting, I guess it does not depend on which Java thread
terminates last, only main is counted? Looks a bit inconsistent...

> > > > 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?
> > >
Seems that explicit call to System.exit() and natural termination
(even by uncaught throwable) are different use cases and need separate
handling.

> > > You cannot kill the entire process when destroying the VM.  Apps that
> > > embed the VM will have a nasty surprise.

Is it the case for System.exit()/halt() ? Given the test result above,
I suspect RI and J9 just kill the process.

> > >
> > > 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])
> > >
> > >
> >
>

Reply via email to