src/hotspot/share/code/compiledIC.cpp
changeset 58505 c16f3a24a6fc
parent 57603 f9d9bed12d1a
child 58679 9c3209ff7550
child 59056 15936b142f86
--- a/src/hotspot/share/code/compiledIC.cpp	Tue Oct 08 09:39:10 2019 -0700
+++ b/src/hotspot/share/code/compiledIC.cpp	Tue Oct 08 13:18:40 2019 -0400
@@ -741,4 +741,22 @@
   tty->cr();
 }
 
+void CompiledDirectStaticCall::verify_mt_safe(const methodHandle& callee, address entry,
+                                              NativeMovConstReg* method_holder,
+                                              NativeJump*        jump) {
+  // A generated lambda form might be deleted from the Lambdaform
+  // cache in MethodTypeForm.  If a jit compiled lambdaform method
+  // becomes not entrant and the cache access returns null, the new
+  // resolve will lead to a new generated LambdaForm.
+  Method* old_method = reinterpret_cast<Method*>(method_holder->data());
+  assert(old_method == NULL || old_method == callee() ||
+         callee->is_compiled_lambda_form() ||
+         !old_method->method_holder()->is_loader_alive() ||
+         old_method->is_old(),  // may be race patching deoptimized nmethod due to redefinition.
+         "a) MT-unsafe modification of inline cache");
+
+  address destination = jump->jump_destination();
+  assert(destination == (address)-1 || destination == entry,
+         "b) MT-unsafe modification of inline cache");
+}
 #endif // !PRODUCT