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