harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Evgueni Brevnov" <evgueni.brev...@gmail.com>
Subject Re: [classlib][IBMVME]the return value of java.exe
Date Tue, 31 Oct 2006 13:39:22 GMT
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 <alexey.v.varlamov@gmail.com> wrote:
> 2006/10/30, Evgueni Brevnov <evgueni.brevnov@gmail.com>:
> > 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 <evgueni.brevnov@gmail.com> 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 <t.p.ellison@gmail.com> 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 <evgueni.brevnov@gmail.com> 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 <evgueni.brevnov@gmail.com>
wrote:
> > > > >> > I'll try to see how to fix it for DRLVM
> > > > >> >
> > > > >> > Evgueni
> > > > >> >
> > > > >> > On 10/30/06, Evgueni Brevnov <evgueni.brevnov@gmail.com>
wrote:
> > > > >> > > hmmm.... I got 0 for DRLVM on Win2003
> > > > >> > >
> > > > >> > > Evgueni
> > > > >> > >
> > > > >> > > On 10/30/06, Spark Shen <smallsmallorgan@gmail.com>
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 (t.p.ellison@gmail.com)
> > > >
> > > >
> > >
> >
>

Mime
View raw message