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