private void sendBlockedMessages() {
        Counter recurselevel = sendBlockedRecurseLevel.get();
        if (recurselevel.enough()) return;
        boolean someoneElseIsTakingCareOfIt = sendingBlockedToken.getAndSet(true);
        if (someoneElseIsTakingCareOfIt) return;
        try {
            recurselevel.inc();
            BlockedMessage msg = getNextBlockedMessage();
            for (boolean success = true; success && msg != null; ) {
                success = msg.sendOrExpire();
                if (!success) {
                    // Failed sending, put it back at the head of the Q.
                    synchronized (blockedQ) {
                        blockedQ.addFirst(msg);
                    }
                } else {
                    msg = getNextBlockedMessage();
                }
            }
        } finally {
            recurselevel.dec();
            sendingBlockedToken.set(false);
        }
    }
This is a blocking proxy to the {@link #send(Message)} method. This
method blocks until the message is accepted by the send queue. Note that
the message timeout does not activate by calling this method. This method
will also return if this session is closed or the calling thread is
interrupted.

@param msg the message to send
@return the result of initiating send
@throws InterruptedException thrown if the calling thread is interrupted
messagebus/src/main/java/com/yahoo/messagebus/SourceSession.java