Please review a tiny fix in the ForkJoinPool. Since JDK 9 (JDK-8134852 [1]) in 
one case when TC subfield in ctl field is decremented, the applied masking 
(UMASK, upper bits) may not preserve neighbor RC subfield sometimes. In JDKs 
prior to 19 FJP may stop executing tasks, which requires a long running 
application restart [2]. Since 19 it is even harder to reproduce because of the 
separate parallelism field.

The fix is to replace 'UMASK & (c - TC_UNIT)'  with '(c & RC_MASK) | ((c - 
TC_UNIT)' which preserves the RC part of the compareAndSetCtl() candidate 
argument. On 17u and 11u that repairs known tests and applications. This PR is 
for the mainline, and I intend to backport it to 21u, 17u and 11u.

[1] https://bugs.openjdk.org/browse/JDK-8134852
[2] https://bugs.openjdk.org/browse/JDK-8330017

-------------

Commit messages:
 - RC_MASK and TC_MASK instead of UMASK

Changes: https://git.openjdk.org/jdk/pull/24034/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24034&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8351933
  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/24034.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24034/head:pull/24034

PR: https://git.openjdk.org/jdk/pull/24034

Reply via email to