< prev index next >

src/cpu/x86/vm/shenandoahBarrierSet_x86.cpp

Print this page
rev 10557 : [backport] Assembler write barriers should consistently check for forwarded objects

@@ -59,15 +59,19 @@
   assert(dst != rscratch1, "different regs");
 
   Label done;
 
   Address gc_state(r15_thread, in_bytes(JavaThread::gc_state_offset()));
-  __ testb(gc_state, ShenandoahHeap::EVACUATION);
 
   // Now check if evacuation is in progress.
+  __ testb(gc_state, ShenandoahHeap::HAS_FORWARDED | ShenandoahHeap::EVACUATION);
+  __ jcc(Assembler::zero, done);
+
+  // Heap is unstable, need to perform the read-barrier even if WB is inactive
   interpreter_read_barrier_not_null(masm, dst);
 
+  __ testb(gc_state, ShenandoahHeap::EVACUATION);
   __ jcc(Assembler::zero, done);
   __ push(rscratch1);
   __ push(rscratch2);
 
   __ movptr(rscratch1, dst);
< prev index next >