RFR (XS): 8182050: assert(_whole_heap.contains(p)) failed: Attempt to access p out of bounds of card marking array's _whole_heap
Erik Helin
erik.helin at oracle.com
Wed Nov 22 15:14:05 UTC 2017
On 11/22/2017 02:18 PM, Thomas Schatzl wrote:
> Hi all,
>
> can I have reviews for this tiny change that fixes tripping an assert
> when executing the post barrier for arrays for G1?
>
> The issue is that when calling arraycopy to a zero sized array of j.l.O
> a call to the post barrier is emitted. If that object at that point has
> been allocated so that its non-existent value array is located at the
> end of the heap, the MemRegion passed to
> G1SATBCardTableLoggingModRefBS::invalidate() has a start address just
> beyond the heap the assert trips over (it has a zero-sized length).
>
> Note that the G1 invalidation code is correct, i.e. handled the
> situation correctly, just the assert is wrong in this case.
>
> The suggested fix is to ignore zero-sized MemRegions like the other
> card table implementation does. This will keep triggering the assert
> for really wrong MemRegions (which is desired imho).
>
> Thanks go to Alex who investigated and fixed a very similar issue with
> the other collectors in JDK-8185591.
>
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8182050
> Webrev:
> http://cr.openjdk.java.net/~tschatzl/8182050/webrev/
Looks good, Reviewed. Thanks Thomas for taking care of this (and Alex
for finding the cause for JDK-8185591).
Erik
> Testing:
> Included jtreg test case, checking that the issue does not occur with
> the change anymore.
>
> Thanks,
> Thomas
>
More information about the hotspot-gc-dev
mailing list