private void linkRemoved(Link _link) { if (_link instanceof Receiver) { Receiver link = (Receiver)_link; assert _receivers > 0; _receivers--; if (link.getDrain()) { link.setDrain(false); assert _draining > 0; _draining--; } if (_blocked.contains(link)) _blocked.remove(link); else if (_credited.contains(link)) _credited.remove(link); else assert(false); } }
private void linkRemoved(Link _link) { if (_link instanceof Receiver && (Boolean) _link.getContext()) { _link.setContext(Boolean.FALSE); Receiver link = (Receiver)_link; assert _receivers > 0; _receivers--; if (link.getDrain()) { link.setDrain(false); assert _draining > 0; _draining--; } if (_blocked.contains(link)) _blocked.remove(link); else if (_credited.contains(link)) _credited.remove(link); else assert(false); } }
private void handleAborted(Receiver receiver, Delivery delivery) { splitContent = null; receiver.advance(); delivery.settle(); if(!receiver.getDrain()) { flow(1, false); } else { processForDrainCompletion(); } }
if (!receiver.getDrain()) { receiver.flow(1);
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { connection.requireInHandler(); Receiver receiver = ((Receiver) delivery.getLink()); if (receiver.current() != delivery) { return; } if (delivery.isAborted()) { // Aborting implicitly remotely settles, so advance // receiver to the next delivery and settle locally. receiver.advance(); delivery.settle(); // Replenish the credit if not doing a drain if (!receiver.getDrain()) { receiver.flow(1); } return; } else if (delivery.isPartial()) { return; } ReadableBuffer data = receiver.recv(); receiver.advance(); Transaction tx = null; if (delivery.getRemoteState() instanceof TransactionalState) { TransactionalState txState = (TransactionalState) delivery.getRemoteState(); tx = this.sessionSPI.getTransaction(txState.getTxnId(), false); } final Transaction txUsed = tx; actualDelivery(delivery, receiver, data, txUsed); }