diff src/share/vm/runtime/thread.cpp @ 12163:74608df95ba3

8022595: JSR292: deadlock during class loading of MethodHandles, MethodHandleImpl & MethodHandleNatives Reviewed-by: kvn, coleenp, dholmes
author vlivanov
date Mon, 26 Aug 2013 17:41:05 +0400
parents 02d7aa1456c9
children 27ffd1c4537b
line wrap: on
line diff
--- a/src/share/vm/runtime/thread.cpp	Mon Aug 26 17:37:25 2013 +0400
+++ b/src/share/vm/runtime/thread.cpp	Mon Aug 26 17:41:05 2013 +0400
@@ -3636,6 +3636,16 @@
   CompileBroker::compilation_init();
 #endif
 
+  if (EnableInvokeDynamic) {
+    // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
+    // It is done after compilers are initialized, because otherwise compilations of
+    // signature polymorphic MH intrinsics can be missed
+    // (see SystemDictionary::find_method_handle_intrinsic).
+    initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK_0);
+    initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK_0);
+    initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK_0);
+  }
+
 #if INCLUDE_MANAGEMENT
   Management::initialize(THREAD);
 #endif // INCLUDE_MANAGEMENT