RFR: 8364159: Shenandoah assertions after JDK-8361712
Thomas Stuefe
stuefe at openjdk.org
Tue Jul 29 04:41:30 UTC 2025
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.
-------------
Commit messages:
- start
Changes: https://git.openjdk.org/jdk/pull/26513/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26513&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8364159
Stats: 8 lines in 1 file changed: 4 ins; 0 del; 4 mod
Patch: https://git.openjdk.org/jdk/pull/26513.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26513/head:pull/26513
PR: https://git.openjdk.org/jdk/pull/26513
More information about the hotspot-gc-dev
mailing list