public void drain(int credits) { connection.runNow(() -> { receiver.drain(credits); connection.flush(); }); }
public void drain(int credits) { synchronized (connection.getLock()) { receiver.drain(credits); } connection.flush(); }
public void drain(int credits) { connection.lock(); try { receiver.drain(credits); } finally { connection.unlock(); } connection.flush(); }
@Override public void run() { checkClosed(); try { getEndpoint().drain(credit); session.pumpToProtonTransport(request); request.onSuccess(); } catch (Exception e) { request.onFailure(e); } } });
@Override public ProtonReceiver drain(long timeout, Handler<AsyncResult<Void>> completionHandler) { if (prefetch > 0) { throw new IllegalStateException("Manual credit management not available while prefetch is non-zero"); } if (completionHandler == null) { throw new IllegalArgumentException("A completion handler must be provided"); } if (drainCompleteHandler != null) { throw new IllegalStateException("A previous drain operation has not yet completed"); } if ((getCredit() - getQueued()) <= 0) { // We have no remote credit if (getQueued() == 0) { // All the deliveries have been processed, drain is a no-op, nothing to do but complete. completionHandler.handle(Future.succeededFuture()); } else { // There are still deliveries to process, wait for them to be. setDrainHandlerAndTimeoutTask(timeout, completionHandler); } } else { setDrainHandlerAndTimeoutTask(timeout, completionHandler); getReceiver().drain(0); flushConnection(); } return this; }
receiver.drain(0);
receiver.drain(0);
receiver.drain(0);