Repository: qpid-dispatch Updated Branches: refs/heads/master 267207d2b -> 6203bb927
DISPATCH-1153 - Make sure the size of the undelivered list in non-zero before deleting its head. A detach might have arrived in the meantime and cleaned out the undelivered list Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/6203bb92 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/6203bb92 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/6203bb92 Branch: refs/heads/master Commit: 6203bb92786f4ec535dbd538cc1f98df26982373 Parents: 267207d Author: Ganesh Murthy <gmur...@redhat.com> Authored: Wed Oct 24 09:54:02 2018 -0400 Committer: Ganesh Murthy <gmur...@redhat.com> Committed: Wed Oct 24 09:54:02 2018 -0400 ---------------------------------------------------------------------- src/router_core/transfer.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6203bb92/src/router_core/transfer.c ---------------------------------------------------------------------- diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c index b011f5f..f3457fc 100644 --- a/src/router_core/transfer.c +++ b/src/router_core/transfer.c @@ -174,8 +174,19 @@ int qdr_link_process_deliveries(qdr_core_t *core, qdr_link_t *link, int credit) // The entire message has been sent. It is now the appropriate time to have the delivery removed // from the head of the undelivered list and move it to the unsettled list if it is not settled. // - DEQ_REMOVE_HEAD(link->undelivered); num_deliveries_completed++; + + credit--; + link->credit_to_core--; + link->total_deliveries++; + offer = DEQ_SIZE(link->undelivered); + + if (offer == 0) { + sys_mutex_unlock(conn->work_lock); + return num_deliveries_completed; + } + + DEQ_REMOVE_HEAD(link->undelivered); dlv->link_work = 0; if (settled) { @@ -186,11 +197,6 @@ 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, "Delivery transfer: dlv:%lx qdr_link_process_deliveries: undelivered-list -> unsettled-list", (long) dlv); } - - credit--; - link->credit_to_core--; - link->total_deliveries++; - offer = DEQ_SIZE(link->undelivered); } else { // @@ -228,7 +234,6 @@ int qdr_link_process_deliveries(qdr_core_t *core, qdr_link_t *link, int credit) return num_deliveries_completed; } - void qdr_link_flow(qdr_core_t *core, qdr_link_t *link, int credit, bool drain_mode) { qdr_action_t *action = qdr_action(qdr_link_flow_CT, "link_flow"); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org