Mercurial > hg > jdk9-shenandoah > hotspot
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;