8186199: [windows] JNI_DestroyJavaVM not covered by SEH
Reviewed-by: andrew, stuefe
Backport-of: 14d898a1e69ef5afeeb55396881783a3002874fa
diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp
index b277bd8..ac29c82 100644
--- a/hotspot/src/share/vm/prims/jni.cpp
+++ b/hotspot/src/share/vm/prims/jni.cpp
@@ -5296,7 +5296,7 @@
}
_JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args) {
- jint result = 0;
+ jint result = JNI_ERR;
// On Windows, let CreateJavaVM run with SEH protection
#ifdef _WIN32
__try {
@@ -5350,12 +5350,11 @@
, HOTSPOT_JNI_DESTROYJAVAVM_RETURN(_ret_ref));
#endif /* USDT2 */
-jint JNICALL jni_DestroyJavaVM(JavaVM *vm) {
+static jint JNICALL jni_DestroyJavaVM_inner(JavaVM *vm) {
#ifndef USDT2
DTRACE_PROBE1(hotspot_jni, DestroyJavaVM__entry, vm);
#else /* USDT2 */
- HOTSPOT_JNI_DESTROYJAVAVM_ENTRY(
- vm);
+ HOTSPOT_JNI_DESTROYJAVAVM_ENTRY(vm);
#endif /* USDT2 */
jint res = JNI_ERR;
DT_RETURN_MARK(DestroyJavaVM, jint, (const jint&)res);
@@ -5391,6 +5390,20 @@
}
}
+jint JNICALL jni_DestroyJavaVM(JavaVM *vm) {
+ jint result = JNI_ERR;
+ // On Windows, we need SEH protection
+#ifdef _WIN32
+ __try {
+#endif
+ result = jni_DestroyJavaVM_inner(vm);
+#ifdef _WIN32
+ } __except(topLevelExceptionFilter((_EXCEPTION_POINTERS*)_exception_info())) {
+ // Nothing to do.
+ }
+#endif
+ return result;
+}
static jint attach_current_thread(JavaVM *vm, void **penv, void *_args, bool daemon) {
JavaVMAttachArgs *args = (JavaVMAttachArgs *) _args;