private R newOrPooledChunk(R prevChunk, long nextChunkIndex)
    {
        R newChunk = freeChunksPool.poll();
        if (newChunk != null)
        {
            // single-writer: prevChunk::index == nextChunkIndex is protecting it
            assert newChunk.lvIndex() < prevChunk.lvIndex();
            newChunk.soPrev(prevChunk);
            // index set is releasing prev, allowing other pending offers to continue
            newChunk.soIndex(nextChunkIndex);
        }
        else
        {
            newChunk = newChunk(nextChunkIndex, prevChunk, chunkMask + 1, false);
        }
        return newChunk;
    }
We're here because currentChunk.index doesn't match the expectedChunkIndex. To resolve we must now chase the linked
chunks to the appropriate chunk. More than one producer may end up racing to add or discover new chunks.

@param initialChunk the starting point chunk, which does not match the required chunk index
@param requiredChunkIndex the chunk index we need
@return the chunk matching the required index
jctools-core/src/main/java/org/jctools/queues/MpUnboundedXaddArrayQueue.java