You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2016/06/02 11:55:16 UTC
[2/2] qpid-dispatch git commit: DISPATCH-343 - Fixed a regression
affecting multi-frame presettled deliveries.
DISPATCH-343 - Fixed a regression affecting multi-frame presettled deliveries.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/b765c1b8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/b765c1b8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/b765c1b8
Branch: refs/heads/master
Commit: b765c1b841f868429113a3678934a97cf604c1c1
Parents: a19ec1e
Author: Ted Ross <tr...@redhat.com>
Authored: Thu Jun 2 07:48:47 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Jun 2 07:50:21 2016 -0400
----------------------------------------------------------------------
src/router_core/connections.c | 2 +-
src/router_node.c | 17 ++++++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b765c1b8/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 8b2b114..a9612ea 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -461,8 +461,8 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
//
qdr_delivery_ref_t *ref = DEQ_HEAD(updated_deliveries);
while (ref) {
- qdr_del_delivery_ref(&updated_deliveries, ref);
qdr_delivery_decref(ref->dlv);
+ qdr_del_delivery_ref(&updated_deliveries, ref);
ref = DEQ_HEAD(updated_deliveries);
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b765c1b8/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index ff5c58f..10794ac 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -374,9 +374,17 @@ static void AMQP_disposition_handler(void* context, qd_link_t *link, pn_delivery
bool give_reference = false;
//
+ // It's important to not do any processing without a qdr_delivery. When pre-settled
+ // multi-frame deliveries arrive, it's possible for the settlement to register before
+ // the whole message arrives. Such premature settlement indications must be ignored.
+ //
+ if (!delivery)
+ return;
+
+ //
// If the delivery is settled, remove the linkage between the PN and QDR deliveries.
//
- if (pn_delivery_settled(pnd) && !!delivery) {
+ if (pn_delivery_settled(pnd)) {
pn_delivery_set_context(pnd, 0);
qdr_delivery_set_context(delivery, 0);
@@ -389,10 +397,9 @@ static void AMQP_disposition_handler(void* context, qd_link_t *link, pn_delivery
//
// Update the disposition of the delivery
//
- if (!!delivery)
- qdr_delivery_update_disposition(router->router_core, delivery,
- pn_delivery_remote_state(pnd), pn_delivery_settled(pnd),
- give_reference);
+ qdr_delivery_update_disposition(router->router_core, delivery,
+ pn_delivery_remote_state(pnd), pn_delivery_settled(pnd),
+ give_reference);
//
// If settled, close out the delivery
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org