On Fri, 1 Nov 2024 10:58:09 GMT, kabutz <d...@openjdk.org> wrote: >> 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. > > Sure, where should I add that test?
@kabutz I think @DougLea identified some potential edge-cases with the proposed solution, so I added his suggested diff to the JBS Issue for reference. ------------- PR Comment: https://git.openjdk.org/jdk/pull/21820#issuecomment-2455121652