Integrated: 8261448: Preserve GC stack watermark across safepoints in StackWalk

Roman Kennke rkennke at openjdk.java.net
Mon Feb 22 10:13:48 UTC 2021


On Wed, 10 Feb 2021 10:07:20 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

> I am observing the following assert:
> 
> # Internal Error (/home/rkennke/src/openjdk/loom/src/hotspot/share/runtime/stackWatermark.cpp:178), pid=54418, tid=54534
> # assert(is_frame_safe(f)) failed: Frame must be safe
> 
> (see issue for full hs_err)
> 
> In StackWalk::fetchNextBatch() we prepare the entire stack to be processed by calling StackWatermarkSet::finish_processing(jt, NULL, StackWatermarkKind::gc), but then subsequently, during frames scan, perform allocations to fill in the frame information (fill_in_frames => LiveFrameStream::fill_frame => fill_live_stackframe) at where we could safepoint for GC, which could reset the stack watermark.
> 
> This is only relevant for GCs that use the StackWatermark, e.g. ZGC and Shenandoah at the moment.
> 
> Solution is to preserve the stack-watermark across safepoints in StackWalk::fetchNextBatch(). StackWalk::fetchFirstBatch() doesn't look to be affected by this: it is not using the stack-watermark.
> 
> Testing:
>  - [x] StackWalk tests with Shenandoah/aggressive
>  - [x] StackWalk tests with ZGC/aggressive
>  - [x] tier1 (+Shenandoah/ZGC)
>  - [x] tier2 (+Shenandoah/ZGC)

This pull request has now been integrated.

Changeset: c20fb5db
Author:    Roman Kennke <rkennke at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/c20fb5db
Stats:     3 lines in 1 file changed: 2 ins; 0 del; 1 mod

8261448: Preserve GC stack watermark across safepoints in StackWalk

Reviewed-by: eosterlund, stefank

-------------

PR: https://git.openjdk.java.net/jdk/pull/2500



More information about the hotspot-gc-dev mailing list