ted-ross commented on a change in pull request #1018:
URL: https://github.com/apache/qpid-dispatch/pull/1018#discussion_r570516125
##########
File path: src/router_core/transfer.c
##########
@@ -219,14 +217,32 @@ int qdr_link_process_deliveries(qdr_core_t *core,
qdr_link_t *link, int credit)
dlv->where = QDR_DELIVERY_IN_UNSETTLED;
qd_log(core->log, QD_LOG_DEBUG, DLV_FMT"Delivery
transfer: qdr_link_process_deliveries: undelivered-list -> unsettled-list",
DLV_ARGS(dlv));
}
+ } else {
+ //
+ // This delivery is in the process of being transfered
+ // to a different link. Hack: the adaptor
+ // deliver_handler has issued a new link-attached
+ // action to the core, passing this dlv as the initial
+ // delivery on that new link. When the core gets
+ // around to processing that action it will move the
+ // dlv from this link to the new link. Problem: that
+ // _may_ have already happened before the lock was
+ // taken. This is a race. To work-around, check if the
+ // dlv is still on the current link and if so remove
+ // it. Once the core processes the link attach it will
+ // move the dlv to the new link.
+ //
+ assert(new_disp == QD_DELIVERY_MOVED_TO_NEW_LINK);
Review comment:
srsly?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]