RFR: 8257817: Shenandoah: Don't race with conc-weak-in-progress flag in weak-LRB

Zhengyu Gu zgu at openjdk.java.net
Mon Dec 7 14:28:09 UTC 2020


On Mon, 7 Dec 2020 11:37:36 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

> The weak-LRB code is currently subject to a race. Consider this sequence of events between a Java thread and GC threads:
> During conc-weak-root-in-progress:
> - Java: Load referent out of Reference, it is unreachable but not-yet-cleared
> - GC: Clears referent
> - GC: Concurrently turn off conc-weak-root-in-progress
> - Java: Checks conc-weak-root-in-progress, sees that it's false, continues to use/evac it -> successfully resurrected unreachable object. This must not happen.
> 
> AFAICT, this also affects conc-class-unloading and weak-roots. 
> 
> Proposed fix is to check for evac-in-progress instead. This should be acceptable because this is not a very common path and not very performance-sensitive.
> 
>  - [x] hotspot_gc_shenandoah

I wonder if it is more general problem. Given concurrent weak root in mandatory phase, we should just remove is_concurrent_weak_root_in_progress flag.

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

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



More information about the hotspot-gc-dev mailing list