diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_java_lang_Shutdown.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_java_lang_Shutdown.java index 743a0eced415..7fd979eab12b 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_java_lang_Shutdown.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_java_lang_Shutdown.java @@ -62,6 +62,29 @@ static void beforeHalt() { private static void logRuntimeExit(int status) { // Disable exit logging (GR-45418/JDK-8301627) } + + @Alias + static native void runHooks(); + + @Alias + static native void halt(int status); + + /** + * This substitution makes a few modifications to {@code Shutdown#exit}: + * + */ + @Substitute + static void exit(int status) { + synchronized (Target_java_lang_Shutdown.class) { + runHooks(); + RuntimeSupport.executeTearDownHooks(); + halt(status); + } + } } /** Utility methods for Target_java_lang_Shutdown. */