changeset 9754:7da3c9b25a68

Fix updating of refs in mark-compact. The last upstream merge broke it.
author rkennke
date Wed, 30 Sep 2015 15:01:47 +0200
parents 82e2de7b5401
children fe9a5147d1ea
files src/share/vm/gc/serial/markSweep.cpp src/share/vm/oops/instanceRefKlass.inline.hpp
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/serial/markSweep.cpp	Tue Sep 29 18:47:52 2015 +0200
+++ b/src/share/vm/gc/serial/markSweep.cpp	Wed Sep 30 15:01:47 2015 +0200
@@ -85,6 +85,9 @@
   T heap_oop = oopDesc::load_heap_oop(p);
   if (!oopDesc::is_null(heap_oop)) {
     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+    if (UseShenandoahGC) {
+      obj = ShenandoahBarrierSet::resolve_and_update_oop_static(p, obj);
+    }
     if (!obj->mark()->is_marked() &&
         !is_archive_object(obj)) {
       mark_object(obj);
@@ -182,6 +185,9 @@
   T heap_oop = oopDesc::load_heap_oop(p);
   if (!oopDesc::is_null(heap_oop)) {
     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+    if (UseShenandoahGC) {
+      obj = ShenandoahBarrierSet::resolve_and_update_oop_static(p, obj);
+    }
     if (!obj->mark()->is_marked() &&
         !is_archive_object(obj)) {
       mark_object(obj);
--- a/src/share/vm/oops/instanceRefKlass.inline.hpp	Tue Sep 29 18:47:52 2015 +0200
+++ b/src/share/vm/oops/instanceRefKlass.inline.hpp	Wed Sep 30 15:01:47 2015 +0200
@@ -46,6 +46,9 @@
   ReferenceProcessor* rp = closure->_ref_processor;
   if (!oopDesc::is_null(heap_oop)) {
     oop referent = oopDesc::decode_heap_oop_not_null(heap_oop);
+    if (UseShenandoahGC) {
+      referent = ShenandoahBarrierSet::resolve_and_update_oop_static(referent_addr, referent);
+    }
     if ((UseShenandoahGC || !referent->is_gc_marked()) && (rp != NULL) &&
         rp->discover_reference(obj, reference_type())) {
       return;