-
Enhancement
-
Resolution: Fixed
-
P4
-
19
-
b12
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8327542 | 17.0.12 | Richard Reingruber | P4 | Resolved | Fixed | b01 |
`PSCardTable::scavenge_contents_parallel` is ~170 LOC and the its structure/logic is rather hard to follow.
The original attempt (JDK-8280783) failed because it contained this assert:
```
assert(*dirty_r == clean_card || dirty_r == iter_limit_r, "inv");
```
This assert in the original patch is too strong, `dirty_r` can belong to next stripe (will be cleared/set as part of processing that stripe), but still iterated by current stripe.
Weaken it to:
```
assert(*dirty_r == clean_card || dirty_r >= clear_limit_r);
```
IOW, the dereference of of `dirty_r` can be a data-race if `dirty_r >= clear_limit_r`.
The original attempt (
```
assert(*dirty_r == clean_card || dirty_r == iter_limit_r, "inv");
```
This assert in the original patch is too strong, `dirty_r` can belong to next stripe (will be cleared/set as part of processing that stripe), but still iterated by current stripe.
Weaken it to:
```
assert(*dirty_r == clean_card || dirty_r >= clear_limit_r);
```
IOW, the dereference of of `dirty_r` can be a data-race if `dirty_r >= clear_limit_r`.
- backported by
-
JDK-8327542 [REDO] Parallel: Refactor PSCardTable::scavenge_contents_parallel
- Resolved
- relates to
-
JDK-8280783 Parallel: Refactor PSCardTable::scavenge_contents_parallel
- Resolved
- links to
-
Commit openjdk/jdk17u-dev/fa8a1599
-
Commit openjdk/jdk/22b93a31
-
Review openjdk/jdk17u-dev/2228
-
Review openjdk/jdk/7573
(1 links to)