private MpscUnboundedXaddChunk<E> spinForNextIfNotEmpty(MpscUnboundedXaddChunk<E> cChunk, long cIndex)
    {
        MpscUnboundedXaddChunk<E> next = cChunk.lvNext();
        if (next == null)
        {
            if (lvProducerIndex() == cIndex)
            {
                return null;
            }
            final long ccChunkIndex = cChunk.lvIndex();
            if (lvProducerChunkIndex() == ccChunkIndex) {
                // no need to help too much here or the consumer latency will be hurt
                next = appendNextChunks(cChunk, ccChunkIndex, 1);
            }
            while (next == null)
            {
                next = cChunk.lvNext();
            }
        }
        return next;
    }
@param chunkSize The buffer size to be used in each chunk of this queue
@param maxPooledChunks The maximum number of reused chunks kept around to avoid allocation, chunks are pre-allocated
jctools-core/src/main/java/org/jctools/queues/MpscUnboundedXaddArrayQueue.java