# HG changeset patch # User zgu # Date 1568975922 14400 # Fri Sep 20 06:38:42 2019 -0400 # Node ID 80885e5cc145006e2ebbaee231f31a2e242fb630 # Parent 94bb65cb37d310e64e486a93d9e55ccb1cc2f8c6 8231250: Shenandoah: Shenandoah assert_correct failed; Object klass pointer diff --git a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp @@ -466,17 +466,13 @@ bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool not_in_heap = (decorators & IN_NATIVE) != 0; bool on_reference = on_weak || on_phantom; - bool keep_alive = (decorators & AS_NO_KEEPALIVE) == 0; + bool is_traversal_mode = ShenandoahHeap::heap()->is_traversal_mode(); + bool keep_alive = ((decorators & AS_NO_KEEPALIVE) == 0) || is_traversal_mode; BarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp_thread); if (on_oop) { - if (not_in_heap) { - if (ShenandoahHeap::heap()->is_traversal_mode()) { - load_reference_barrier(masm, dst); - keep_alive = true; - } else { - load_reference_barrier_native(masm, dst); - } + if (not_in_heap && !is_traversal_mode) { + load_reference_barrier_native(masm, dst); } else { load_reference_barrier(masm, dst); }