< prev index next >

src/hotspot/cpu/x86/compiledIC_x86.cpp

Print this page

        

@@ -157,15 +157,22 @@
   // Creation also verifies the object.
   NativeMovConstReg* method_holder = nativeMovConstReg_at(stub);
   NativeJump*        jump          = nativeJump_at(method_holder->next_instruction_address());
 
 #ifdef ASSERT
+  // 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());
-  address destination = jump->jump_destination();
   assert(old_method == NULL || old_method == callee() ||
-         !old_method->method_holder()->is_loader_alive(),
+         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
 
   // Update stub.
< prev index next >