< prev index next >

src/share/vm/gc/serial/markSweep.cpp

Print this page

        

@@ -83,10 +83,13 @@
 
 template <class T> inline void MarkSweep::mark_and_push(T* p) {
   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);
       _marking_stack.push(obj);
     }

@@ -180,10 +183,13 @@
   assert(!Universe::heap()->is_in_reserved(p),
          "roots shouldn't be things within the heap");
   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);
       follow_object(obj);
     }
< prev index next >