src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp
changeset 58693 3f35a9efd7de
parent 58674 42a3a8941418
child 58710 ff3eab78554f
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Wed Oct 16 11:12:47 2019 +0100
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Fri Oct 18 13:07:46 2019 -0400
@@ -262,7 +262,7 @@
   }
 }
 
-oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj) {
+oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj, oop* load_addr) {
   if (CompressedOops::is_null(obj)) {
     return NULL;
   }
@@ -277,7 +277,13 @@
     }
   }
 
-  return load_reference_barrier_not_null(obj);
+  oop fwd = load_reference_barrier_not_null(obj);
+  if (load_addr != NULL && fwd != obj) {
+    // Since we are here and we know the load address, update the reference.
+    ShenandoahHeap::cas_oop(fwd, load_addr, obj);
+  }
+
+  return fwd;
 }
 
 void ShenandoahBarrierSet::clone_barrier_runtime(oop src) {