You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2019/04/03 20:01:13 UTC

[qpid-dispatch] 01/02: DISPATCH-1302: only settle inbound pn_delivery locally in response to PN_DELIVERY event

This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git

commit a1288f7c7f56470b7a50fbf75988c6dde2152507
Author: Kenneth Giusti <kg...@apache.org>
AuthorDate: Thu Mar 28 15:58:57 2019 -0400

    DISPATCH-1302: only settle inbound pn_delivery locally in response to PN_DELIVERY event
---
 src/container.c   |  3 ++-
 src/router_node.c | 32 ++++----------------------------
 2 files changed, 6 insertions(+), 29 deletions(-)

diff --git a/src/container.c b/src/container.c
index e046bfc..410bae4 100644
--- a/src/container.c
+++ b/src/container.c
@@ -636,10 +636,11 @@ void qd_container_handle_event(qd_container_t *container, pn_event_t *event,
     case PN_DELIVERY :
         delivery = pn_event_delivery(event);
         pn_link  = pn_event_link(event);
+
         if (pn_link_is_receiver(pn_link))
             do_receive(delivery);
 
-        if (pn_delivery_updated(delivery)) {
+        if (pn_delivery_updated(delivery) || pn_delivery_settled(delivery)) {
             do_updated(delivery);
             pn_delivery_clear(delivery);
         }
diff --git a/src/router_node.c b/src/router_node.c
index ca78365..3639ddb 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -376,14 +376,6 @@ static bool AMQP_rx_handler(void* context, qd_link_t *link)
             //
             if (!qd_message_is_discard(msg)) {
                 qdr_deliver_continue(delivery);
-
-                //
-                // Settle the proton delivery only if all the data has been received.
-                //
-                if (pn_delivery_settled(pnd) && receive_complete) {
-                    qdr_node_disconnect_deliveries(router->router_core, link, delivery, pnd);
-                    pn_delivery_settle(pnd);
-                }
             }
         }
         else {
@@ -461,12 +453,6 @@ static bool AMQP_rx_handler(void* context, qd_link_t *link)
         //
         if (!qd_message_is_discard(msg)) {
             qdr_deliver_continue(delivery);
-            if (receive_complete) {
-                if (pn_delivery_settled(pnd)) {
-                    qdr_node_disconnect_deliveries(router->router_core, link, delivery, pnd);
-                    pn_delivery_settle(pnd);
-                }
-            }
         }
 
         return next_delivery;
@@ -603,17 +589,6 @@ static bool AMQP_rx_handler(void* context, qd_link_t *link)
     }
 
     if (delivery) {
-        //
-        // Settle the proton delivery only if all the data has arrived
-        //
-        if (pn_delivery_settled(pnd)) {
-            if (receive_complete) {
-                pn_delivery_settle(pnd);
-                qdr_delivery_decref(router->router_core, delivery, "release protection of return from deliver");
-                return next_delivery;
-            }
-        }
-
         qdr_node_connect_deliveries(link, delivery, pnd);
         qdr_delivery_decref(router->router_core, delivery, "release protection of return from deliver");
     } else {
@@ -1589,9 +1564,8 @@ static uint64_t CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_
             // Aborted messages must be settled locally
             // Settling does not produce any disposition to message sender.
             if (pdlv) {
-                if (qdr_delivery_get_context(dlv) != 0)
-                    qdr_node_disconnect_deliveries(router->router_core, qlink, dlv, pdlv);
                 pn_link_advance(plink);
+                qdr_node_disconnect_deliveries(router->router_core, qlink, dlv, pdlv);
                 pn_delivery_settle(pdlv);
             }
         } else {
@@ -1605,8 +1579,10 @@ static uint64_t CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_
             pn_link_advance(plink);
 
             if (settled || remote_snd_settled) {
-                if (pdlv)
+                if (pdlv) {
+                    qdr_node_disconnect_deliveries(router->router_core, qlink, dlv, pdlv);
                     pn_delivery_settle(pdlv);
+                }
             }
         }
         log_link_message(qconn, plink, msg_out);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org