summaryrefslogtreecommitdiff
path: root/openjdkjvm/OpenjdkJvm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'openjdkjvm/OpenjdkJvm.cc')
-rw-r--r--openjdkjvm/OpenjdkJvm.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/openjdkjvm/OpenjdkJvm.cc b/openjdkjvm/OpenjdkJvm.cc
index 8297c54174..675a401bb6 100644
--- a/openjdkjvm/OpenjdkJvm.cc
+++ b/openjdkjvm/OpenjdkJvm.cc
@@ -313,7 +313,9 @@ JNIEXPORT void JVM_GC(void) {
JNIEXPORT __attribute__((noreturn)) void JVM_Exit(jint status) {
LOG(INFO) << "System.exit called, status: " << status;
art::Runtime::Current()->CallExitHook(status);
- exit(status);
+ // Unsafe to call exit() while threads may still be running. They would race
+ // with static destructors.
+ _exit(status);
}
JNIEXPORT jstring JVM_NativeLoad(JNIEnv* env,
@@ -471,7 +473,7 @@ JNIEXPORT __attribute__((noreturn)) jboolean JVM_RaiseSignal(jint signum ATTRIBU
}
JNIEXPORT __attribute__((noreturn)) void JVM_Halt(jint code) {
- exit(code);
+ _exit(code);
}
JNIEXPORT jboolean JVM_IsNaN(jdouble d) {