diff options
author | Tom Tromey <tromey@redhat.com> | 2006-04-04 23:25:09 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2006-04-04 23:25:09 +0000 |
commit | 119afc377a97d86375466560b8ad538197554b81 (patch) | |
tree | 69263b8da1ad85374698a5321589ea97c4c382ff /libjava/java/lang/Runtime.java | |
parent | 4b1c1f6fc2f1ed0d5e4315ef6b788bf84755a5ee (diff) | |
download | gcc-119afc377a97d86375466560b8ad538197554b81.zip gcc-119afc377a97d86375466560b8ad538197554b81.tar.gz gcc-119afc377a97d86375466560b8ad538197554b81.tar.bz2 |
re PR classpath/26990 (SecurityManager.checkExit() problem)
PR libgcj/26990:
* prims.cc (_Jv_RunMain): Use exitNoChecksAccessor.
* gnu/java/lang/natMainThread.cc (call_main): Use
exitNoChecksAccessor.
* testsuite/libjava.lang/pr26990.out: New file.
* testsuite/libjava.lang/pr26990.java: New file.
* java/lang/Runtime.java (exitNoChecks): New method.
(exitNoChecksAccessor): Likewise.
(exit): Call exitNoChecks.
From-SVN: r112685
Diffstat (limited to 'libjava/java/lang/Runtime.java')
-rw-r--r-- | libjava/java/lang/Runtime.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libjava/java/lang/Runtime.java b/libjava/java/lang/Runtime.java index 519b4ac..3466f19 100644 --- a/libjava/java/lang/Runtime.java +++ b/libjava/java/lang/Runtime.java @@ -146,9 +146,20 @@ public class Runtime SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkExit(status); + exitNoChecks(status); + } + // Accessor to avoid adding a vtable slot. + static void exitNoChecksAccessor(int status) + { + current.exitNoChecks(status); + } + + // Private since we can't add a vtable slot in 4.1.x. + private void exitNoChecks(int status) + { if (runShutdownHooks()) - halt(status); + exitInternal(status); // Someone else already called runShutdownHooks(). // Make sure we are not/no longer in the shutdownHooks set. @@ -171,7 +182,7 @@ public class Runtime // while finalization for exit is going on and the status is non-zero // we halt immediately. if (status != 0) - halt(status); + exitInternal(status); while (true) try |