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