< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp
Print this page
rev 57589 : 8237632: Shenandoah fails some vmTestbase_nsk_jvmti tests with "Forwardee must point to a heap address"
*** 174,184 ****
// beats us with an arraycopy, which first copies the array, which potentially contains
// from-space refs, and only afterwards updates all from-space refs to to-space refs,
// which leaves a short window where the new array elements can be from-space.
// In this case, we can just resolve the result again. As we resolve, we need to consider
// the contended write might have been NULL.
! oop result = ShenandoahBarrierSet::resolve_forwarded(witness);
shenandoah_assert_not_forwarded_except(p, result, (result == NULL));
shenandoah_assert_not_in_cset_except(p, result, (result == NULL) || cancelled_gc());
return result;
} else {
// Success! We have updated with known to-space copy. We have already asserted it is sane.
--- 174,187 ----
// beats us with an arraycopy, which first copies the array, which potentially contains
// from-space refs, and only afterwards updates all from-space refs to to-space refs,
// which leaves a short window where the new array elements can be from-space.
// In this case, we can just resolve the result again. As we resolve, we need to consider
// the contended write might have been NULL.
! oop result = witness;
! if (!CompressedOops::is_null(witness) && in_collection_set(witness)) {
! result = ShenandoahBarrierSet::resolve_forwarded(witness);
! }
shenandoah_assert_not_forwarded_except(p, result, (result == NULL));
shenandoah_assert_not_in_cset_except(p, result, (result == NULL) || cancelled_gc());
return result;
} else {
// Success! We have updated with known to-space copy. We have already asserted it is sane.
*** 315,325 ****
}
template<bool RESOLVE>
inline bool ShenandoahHeap::requires_marking(const void* entry) const {
oop obj = oop(entry);
! if (RESOLVE) {
obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
}
return !_marking_context->is_marked(obj);
}
--- 318,328 ----
}
template<bool RESOLVE>
inline bool ShenandoahHeap::requires_marking(const void* entry) const {
oop obj = oop(entry);
! if (RESOLVE && in_collection_set(obj)) {
obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
}
return !_marking_context->is_marked(obj);
}
< prev index next >