-
Bug
-
Resolution: Fixed
-
P3
-
8-shenandoah, 11-shenandoah, 13, 14, 15
-
b23
-
generic
-
generic
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8245360 | 14u-cpu | Roman Kennke | P3 | Resolved | Fixed | master |
JDK-8244685 | 14.0.2 | Roman Kennke | P3 | Resolved | Fixed | b06 |
We're observing an assert in ShenandoahHeapRegion:get_update_watermark():
assert(bottom() <= watermark && watermark <= top(), "within bounds");
The trouble there is that arraycopy routines will get there concurrently with evacuating threads that update update_watermark under lock, but the read-access is not under lock. The observing thread can observe the updates to top and update_watermark in wrong order and thus trip that assert. It happens reliably on aarch64 with the following test:
CONF=fastdebug LANG=C LOG=info make run-test TEST=compiler/types/correctness/OffTest.java TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive"
assert(bottom() <= watermark && watermark <= top(), "within bounds");
The trouble there is that arraycopy routines will get there concurrently with evacuating threads that update update_watermark under lock, but the read-access is not under lock. The observing thread can observe the updates to top and update_watermark in wrong order and thus trip that assert. It happens reliably on aarch64 with the following test:
CONF=fastdebug LANG=C LOG=info make run-test TEST=compiler/types/correctness/OffTest.java TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive"
- backported by
-
JDK-8244685 Shenandoah: Fix racy update of update_watermark
-
- Resolved
-
-
JDK-8245360 Shenandoah: Fix racy update of update_watermark
-
- Resolved
-