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
This commit is contained in:
Tom Tromey
2006-01-06 01:03:45 +00:00
committed by Tom Tromey
parent 0c158c887f
commit 1058a848dc
10 changed files with 122 additions and 96 deletions
-35
View File
@@ -1,35 +0,0 @@
/* Copyright (C) 2000 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package gnu.gcj.runtime;
import java.io.*;
import java.util.*;
public final class FileDeleter
{
public synchronized static void add (File f)
{
if (deleteOnExitStack == null)
deleteOnExitStack = new Stack ();
deleteOnExitStack.push (f);
}
// Helper method called by java.lang.Runtime.exit() to perform
// pending deletions.
public synchronized static void deleteOnExitNow ()
{
if (deleteOnExitStack != null)
while (!deleteOnExitStack.empty ())
((File)(deleteOnExitStack.pop ())).delete ();
}
// A stack of files to delete upon normal termination.
private static Stack deleteOnExitStack;
}
+15 -1
View File
@@ -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);
}