RFR: 8343426: ConcurrentSkipListMap.spliterator() can no longer split the stream
kabutz
duke at openjdk.org
Fri Nov 1 10:17:43 UTC 2024
Since Java 10, spliterators for the ConcurrentSkipListMap were pointing to the head, which has item == null, rather than to the first element. The trySplit() method no longer worked, and always returned null. Therefore, parallel streams have not worked for ConcurrentSkipListMap and ConcurrentSkipListSet since Java 10. It worked correctly in Java 8 and 9.
The problem lies in the constructor calls for the various spliterators. In Java 9, we pass in head.node.next as "origin" into the constructor. In Java 10, this was changed to just head.node as "origin". Since the "item" field is always null on head.node, we never enter the first if() statement in the trySplit() method and thus it always returns null.
-------------
Commit messages:
- Fixed bug in spliterators
Changes: https://git.openjdk.org/jdk/pull/21820/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21820&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8343426
Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/21820.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21820/head:pull/21820
PR: https://git.openjdk.org/jdk/pull/21820
More information about the core-libs-dev
mailing list