RFR: Unsafe comparison in ShenandoahHeap::evac_update_oop_ref

Aleksey Shipilev shade at redhat.com
Wed Jan 24 16:42:56 UTC 2018


Traversal GC fails in ShenandoahHeap::evac_update_oop_ref when -XX:+VerifyStrictOopOperations is
enabled, because we need:

$ hg qdiff
diff -r 21c595539121 src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp	Wed Jan 24 17:32:27 2018 +0100
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp	Wed Jan 24 17:40:35 2018 +0100
@@ -151,7 +151,7 @@
         forwarded_oop = evacuate_object(heap_oop, Thread::current(), evac);
       }
       oop prev = atomic_compare_exchange_oop(forwarded_oop, p, heap_oop);
-      if (prev == heap_oop) {
+      if (oopDesc::unsafe_equals(prev, heap_oop)) {
         return forwarded_oop;
       } else {
         return NULL;

This actually affects partial too, which call this method in SVWB.

Testing: failing test

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list