# HG changeset patch # User rkennke # Date 1443618107 -7200 # Node ID 7da3c9b25a684588aaefe5c8082aa1c3b2d1f3c7 # Parent 82e2de7b54015685a46432a1df6082b890357fd3 Fix updating of refs in mark-compact. The last upstream merge broke it. diff -r 82e2de7b5401 -r 7da3c9b25a68 src/share/vm/gc/serial/markSweep.cpp --- 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); diff -r 82e2de7b5401 -r 7da3c9b25a68 src/share/vm/oops/instanceRefKlass.inline.hpp --- 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;