-
Bug
-
Resolution: Unresolved
-
P3
-
None
-
25
-
In Review
The following commit:
https://github.com/openjdk/shenandoah/pull/193/commits/ca96f5232c0107856a811b27b6b33794a60f7083
in our initial implementation of block_start() had a bug that was never found or fixed, and was later hidden by #undef'ing the code which was left in place for a potential future where object_start arrays may not be updated atomically wrt card scans. If the code were ever to be not undef'd out there would be problems. Either that piece of unused forward walk code should be removed entirely, or the code in the commented out section should be fixed.
The bug was identified by Kelvin Nilsen.
Follow up Note:
============
In the course of investigating this issue, it was found that the issue was deeper, and revealed a bug in `block_start` following class unloading. Here's a succinct summary of the issue and its fix by [~kdnilsen]:
"When scanning a range of dirty cards within the GenShen remembered set, we need to find the object that spans the beginning of the left-most dirty card. The existing code is not reliable following class unloading.
The new code uses the marking context when it is available to determine the location of live objects that reside below TAMS within each region. Above TAMS, all objects are presumed live and parsable."
This makes the bug more serious, if rare, bug and likely a P3. Adjusting the priority setting accordingly.
https://github.com/openjdk/shenandoah/pull/193/commits/ca96f5232c0107856a811b27b6b33794a60f7083
in our initial implementation of block_start() had a bug that was never found or fixed, and was later hidden by #undef'ing the code which was left in place for a potential future where object_start arrays may not be updated atomically wrt card scans. If the code were ever to be not undef'd out there would be problems. Either that piece of unused forward walk code should be removed entirely, or the code in the commented out section should be fixed.
The bug was identified by Kelvin Nilsen.
Follow up Note:
============
In the course of investigating this issue, it was found that the issue was deeper, and revealed a bug in `block_start` following class unloading. Here's a succinct summary of the issue and its fix by [~kdnilsen]:
"When scanning a range of dirty cards within the GenShen remembered set, we need to find the object that spans the beginning of the left-most dirty card. The existing code is not reliable following class unloading.
The new code uses the marking context when it is available to determine the location of live objects that reside below TAMS within each region. Above TAMS, all objects are presumed live and parsable."
This makes the bug more serious, if rare, bug and likely a P3. Adjusting the priority setting accordingly.
- links to
-
Review(master) openjdk/jdk/27353