RFR: 8364159: Shenandoah assertions after JDK-8361712
Aleksey Shipilev
shade at openjdk.org
Wed Jul 30 09:42:53 UTC 2025
On Mon, 28 Jul 2025 16:49:40 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
> In `ShenandoahAsserts::extract_klass_safely`, we attempt to carefully extract the Klass for an object and trip over our own feet doing this. We load the Markword twice: once to read "is_marked" and get the forwardee, once to extract the narrowKlass.
>
> If between the first and the second load we did evacuate the object concurrently, this happens:
>
> T1 : fwd = SheandoahForwarding::get_forwardee_raw_unchecked(obj) => obj unmarked => (fwd == obj)
> T2 : (installs forwarding pointer in obj)
> T1: read markword from fwd again, (fwd == obj) => reads markword from forwarded obj, interprets the zeros in the upper part of the forwardee address as narrowKlass == 0, asserts
>
> The solution is - as ShenandoahForwarding::klass() already does - to load the MW from original obj only once. Patch does that.
Yes, please integrate. Seeing failure in current testing as well.
-------------
Marked as reviewed by shade (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/26513#pullrequestreview-3070649282
More information about the hotspot-gc-dev
mailing list