private boolean offerAndWakeup(E[] buffer, long mask, long pIndex, E e)
    {
        final long offset = modifiedCalcCircularRefElementOffset(pIndex, mask);
        final Thread consumerThread = lvBlocked();

        // We could see a null here through a race with the consumer not yet storing the reference. Just retry.
        if (consumerThread == null)
        {
            return false;
        }

        // Claim the slot and the responsibility of unparking
        if(!casProducerIndex(pIndex, pIndex + 1))
        {
            return false;
        }

        soRefElement(buffer, offset, e);
        LockSupport.unpark(consumerThread);
        return true;
    }
{@link #offer} if {@link #size()} is less than threshold.

@param e         the object to offer onto the queue, not null
@param threshold the maximum allowable size
@return true if the offer is successful, false if queue size exceeds threshold
@since 3.0.1
jctools-core/src/main/java/org/jctools/queues/MpscBlockingConsumerArrayQueue.java