src/hotspot/share/runtime/sharedRuntime.cpp
changeset 53994 77343f5c85cb
parent 53971 1019c97e1bde
child 54523 5df03f58d25b
--- a/src/hotspot/share/runtime/sharedRuntime.cpp	Mon Mar 04 11:28:52 2019 -0800
+++ b/src/hotspot/share/runtime/sharedRuntime.cpp	Mon Mar 04 19:38:50 2019 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1376,12 +1376,18 @@
   }
 #endif
 
-  // Do not patch call site for static call when the class is not
-  // fully initialized.
-  if (invoke_code == Bytecodes::_invokestatic &&
-      !callee_method->method_holder()->is_initialized()) {
-    assert(callee_method->method_holder()->is_linked(), "must be");
-    return callee_method;
+  // Do not patch call site for static call to another class
+  // when the class is not fully initialized.
+  if (invoke_code == Bytecodes::_invokestatic) {
+    if (!callee_method->method_holder()->is_initialized() &&
+        callee_method->method_holder() != caller_nm->method()->method_holder()) {
+      assert(callee_method->method_holder()->is_linked(), "must be");
+      return callee_method;
+    } else {
+      assert(callee_method->method_holder()->is_initialized() ||
+             callee_method->method_holder()->is_reentrant_initialization(thread),
+             "invalid class initialization state for invoke_static");
+    }
   }
 
   // JSR 292 key invariant: