--- 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: