RFR: Remove over-strict assert_not_forwarded() in ShConcMark
Roman Kennke
rkennke at redhat.com
Fri Apr 20 10:21:45 UTC 2018
I withdraw this change. I haven't really thought this through.
Roman
> After updating refs in ShConcMark, we check that the ref is not
> forwarded. It turns out that this is overly strict: it can happen in
> case of arraycopy and clone, that from-space oops are written to
> to-space refs. However, this is a temporary situation: the
> arraycopy/clone post-barrier will scan the copy and update all refs. It
> can still happen we trip this assert though. I propose to remove the
> assert. I don't really have a better way to fix this. (Suggestions
> welcome!).
>
> I found this during merge, but think it should go separately for backports.
>
> diff --git
> a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.inline.hpp
> b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.inline.hpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.inline.hpp
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.inline.hpp
> @@ -256,7 +256,6 @@
> // It happens when a mutator thread beats us by writing another
> value. In that
> // case we don't need to do anything else.
> if (UPDATE_REFS != CONCURRENT || !oopDesc::is_null(obj)) {
> - shenandoah_assert_not_forwarded(p, obj);
> shenandoah_assert_not_in_cset_except(p, obj,
> heap->cancelled_concgc());
>
> if (heap->mark_next(obj)) {
>
>
>
More information about the shenandoah-dev
mailing list