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

Reply via email to