aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-01-06 01:03:45 +0000
committerTom Tromey <tromey@gcc.gnu.org>2006-01-06 01:03:45 +0000
commit1058a848dcd220965dd4d126eb9f4159782dd586 (patch)
treeb1406d0aef45f9b54fc3cb3b56375bc3ce39b15c /libjava/gnu/java
parent0c158c887f3669dd47297b68b1aa490f5da5b7ad (diff)
downloadgcc-1058a848dcd220965dd4d126eb9f4159782dd586.zip
gcc-1058a848dcd220965dd4d126eb9f4159782dd586.tar.gz
gcc-1058a848dcd220965dd4d126eb9f4159782dd586.tar.bz2
natThread.cc (finish_): Don't clear 'group'.
* java/lang/natThread.cc (finish_): Don't clear 'group'. * sources.am, Makefile.in: Rebuilt. * java/lang/Runtime.java (exit): Merged with Classpath. (runShutdownHooks): New method from Classpath. * java/io/File.java (deleteOnExit): Use DeleteFileHelper, not FileDeleter. * gnu/gcj/runtime/FileDeleter.java: Removed. * java/lang/natRuntime.cc (runFinalizationForExit): New method. (exitInternal): Don't run finalizers or delete files. From-SVN: r109400
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r--libjava/gnu/java/lang/natMainThread.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/libjava/gnu/java/lang/natMainThread.cc b/libjava/gnu/java/lang/natMainThread.cc
index 7e8e422..95626eb 100644
--- a/libjava/gnu/java/lang/natMainThread.cc
+++ b/libjava/gnu/java/lang/natMainThread.cc
@@ -1,6 +1,6 @@
// natMainThread.cc - Implementation of MainThread native methods.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2003, 2006 Free Software Foundation
This file is part of libgcj.
@@ -15,8 +15,11 @@ details. */
#include <gcj/cni.h>
#include <jvm.h>
+#include <java-threads.h>
#include <gnu/java/lang/MainThread.h>
+#include <java/lang/Runtime.h>
+#include <java/lang/ThreadGroup.h>
typedef void main_func (jobject);
@@ -45,4 +48,15 @@ gnu::java::lang::MainThread::call_main (void)
main_func *real_main = (main_func *) meth->ncode;
(*real_main) (args);
+
+ // Note that we do thread cleanup here. We have to do this here and
+ // not in _Jv_RunMain; if we do if after the main thread has exited,
+ // our ThreadGroup will be null, and if Runtime.exit tries to create
+ // a new Thread (which it does when running shutdown hooks), it will
+ // eventually NPE due to this.
+ _Jv_ThreadWait ();
+
+ int status = (int) ::java::lang::ThreadGroup::had_uncaught_exception;
+ ::java::lang::Runtime *runtime = ::java::lang::Runtime::getRuntime ();
+ runtime->exit (status);
}