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