RFR: Make sure bitmap is marked incomplete before bitmap resets

Roman Kennke rkennke at redhat.com
Wed Sep 19 10:32:22 UTC 2018


Ok.
Roman


> ShHeap::mark_incomplete_marking_context() appears to be unused. It was supposed to mark the context
> as incomplete, so that ShHeap::complete_marking_context() would assert in erroneous conditions.
> Except that I forgot to actually call it.
> 
> This patch puts it where it belongs, and does a few other asserts to verify the placement:
> 
> diff -r 4a4a23717517 src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp        Wed Sep 19 11:42:05 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp        Wed Sep 19 11:52:55 2018 +0200
> @@ -432,4 +432,5 @@
>  void ShenandoahHeap::reset_mark_bitmap() {
>    assert_gc_workers(_workers->active_workers());
> +  mark_incomplete_marking_context();
> 
>    ShenandoahResetBitmapTask task;
> @@ -1471,4 +1472,5 @@
> 
>    assert(marking_context()->is_bitmap_clear(), "need clear marking bitmap");
> +  assert(!marking_context()->is_complete(), "should not be complete");
> 
>    if (ShenandoahVerify) {
> diff -r 4a4a23717517 src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.cpp Wed Sep 19 11:42:05 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahMarkCompact.cpp Wed Sep 19 11:52:55 2018 +0200
> @@ -109,4 +109,5 @@
>      heap->reset_mark_bitmap();
>      assert(heap->marking_context()->is_bitmap_clear(), "sanity");
> +    assert(!heap->marking_context()->is_complete(), "sanity");
> 
>      // d. Abandon reference discovery and clear all discovered references.
> diff -r 4a4a23717517 src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Wed Sep 19 11:42:05 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Wed Sep 19 11:52:55 2018 +0200
> @@ -382,4 +382,5 @@
> 
>    assert(_heap->marking_context()->is_bitmap_clear(), "need clean mark bitmap");
> +  assert(!_heap->marking_context()->is_complete(), "should not be complete");
> 
>    ShenandoahFreeSet* free_set = _heap->free_set();
> 
> Testing: tier3_gc_shenandoah
> 
> Thanks,
> -Aleksey
> 




More information about the shenandoah-dev mailing list