@Override
    public int drain(Consumer<E> c, int limit)
    {
        final E[] buffer = this.buffer;
        final long mask = this.mask;
        for (int i = 0; i < limit; i++)
        {
            final long consumerPosition = lpConsumerPosition();
            final long offset = calcCircularRefElementOffset(consumerPosition, mask);

            E e;
            if ((e = lvRefElement(buffer, offset)) != null)
            {
                signalConsumerProgress(consumerPosition, buffer, offset);
                c.accept(e);
            }
            else
            {
                return i;
            }
        }
        return limit;
    }
Validates a slow producer over-claim throwing {@link IllegalStateException} if the offer on it can't continue.
jctools-experimental/src/main/java/org/jctools/queues/MpscRelaxedArrayQueue.java