This is an automated email from the ASF dual-hosted git repository. kgiusti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/main by this push: new 12c524d DISPATCH-2248: fix the dereference of a deliverys link work item 12c524d is described below commit 12c524d2bbef45a5846dbe742c790d0907d93df2 Author: Kenneth Giusti <kgiu...@apache.org> AuthorDate: Tue Sep 7 17:22:49 2021 -0400 DISPATCH-2248: fix the dereference of a deliverys link work item This closes #1364 --- src/router_core/forwarder.c | 7 +++---- src/router_core/transfer.c | 11 +++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c index 49099c3..642b4cd 100644 --- a/src/router_core/forwarder.c +++ b/src/router_core/forwarder.c @@ -229,13 +229,12 @@ static void qdr_forward_drop_presettled_CT_LH(qdr_core_t *core, qdr_link_t *link // has no other deliveries associated with it, it can be removed // from the work list. // - assert(dlv->link_work); - if (dlv->link_work && (--dlv->link_work->value == 0)) { + if (--dlv->link_work->value == 0) { DEQ_REMOVE(link->work_list, dlv->link_work); qdr_link_work_release(dlv->link_work); // for work_list - qdr_link_work_release(dlv->link_work); // for dlv ref - dlv->link_work = 0; } + qdr_link_work_release(dlv->link_work); // for dlv ref + dlv->link_work = 0; dlv->disposition = PN_RELEASED; qdr_delivery_decref_CT(core, dlv, "qdr_forward_drop_presettled_CT_LH - remove from link-work list"); diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c index 39f2d59..1996124 100644 --- a/src/router_core/transfer.c +++ b/src/router_core/transfer.c @@ -300,16 +300,15 @@ void qdr_link_complete_sent_message(qdr_core_t *core, qdr_link_t *link) if (!!dlv && qdr_delivery_send_complete(dlv)) { DEQ_REMOVE_HEAD(link->undelivered); if (dlv->link_work) { - assert(dlv->link_work == link->work_list.head); + // ensure deliveries are sent in order: + assert(dlv->link_work == DEQ_HEAD(link->work_list)); assert(dlv->link_work->value > 0); - dlv->link_work->value -= 1; - - if (dlv->link_work->value == 0) { + if (--dlv->link_work->value == 0) { DEQ_REMOVE_HEAD(link->work_list); qdr_link_work_release(dlv->link_work); // for work_list ref - qdr_link_work_release(dlv->link_work); // for dlv ref - dlv->link_work = 0; } + qdr_link_work_release(dlv->link_work); // for dlv ref + dlv->link_work = 0; } if (!dlv->settled && !qdr_delivery_oversize(dlv) && !qdr_delivery_is_aborted(dlv)) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org