You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2017/10/24 17:42:35 UTC

qpid-dispatch git commit: Added delivery reference protrection from qdr_link_deliver* to router_node. This closes #213

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master e6eb3b01f -> 46ebb4d8f


Added delivery reference protrection from qdr_link_deliver* to router_node. This closes #213


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/46ebb4d8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/46ebb4d8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/46ebb4d8

Branch: refs/heads/master
Commit: 46ebb4d8f525895cc19cf3dbab011f256b07b43c
Parents: e6eb3b0
Author: Ted Ross <tr...@redhat.com>
Authored: Mon Oct 23 11:22:50 2017 -0400
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Tue Oct 24 13:38:30 2017 -0400

----------------------------------------------------------------------
 src/router_core/transfer.c | 5 ++++-
 src/router_node.c          | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/46ebb4d8/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index a783693..a23c5c0 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -58,6 +58,7 @@ qdr_delivery_t *qdr_link_deliver(qdr_link_t *link, qd_message_t *msg, qd_iterato
     dlv->error          = 0;
 
     qdr_delivery_incref(dlv, "qdr_link_deliver - newly created delivery, add to action list");
+    qdr_delivery_incref(dlv, "qdr_link_deliver - protect returned value");
 
     action->args.connection.delivery = dlv;
     qdr_action_enqueue(link->core, action);
@@ -83,6 +84,7 @@ qdr_delivery_t *qdr_link_deliver_to(qdr_link_t *link, qd_message_t *msg,
     dlv->error          = 0;
 
     qdr_delivery_incref(dlv, "qdr_link_deliver_to - newly created delivery, add to action list");
+    qdr_delivery_incref(dlv, "qdr_link_deliver_to - protect returned value");
 
     action->args.connection.delivery = dlv;
     qdr_action_enqueue(link->core, action);
@@ -109,6 +111,7 @@ qdr_delivery_t *qdr_link_deliver_to_routed_link(qdr_link_t *link, qd_message_t *
 
     qdr_delivery_read_extension_state(dlv, disposition, disposition_data, true);
     qdr_delivery_incref(dlv, "qdr_link_deliver_to_routed_link - newly created delivery, add to action list");
+    qdr_delivery_incref(dlv, "qdr_link_deliver_to_routed_link - protect returned value");
 
     action->args.connection.delivery = dlv;
     action->args.connection.tag_length = tag_length;
@@ -328,7 +331,7 @@ void qdr_delivery_incref(qdr_delivery_t *delivery, const char *label)
     uint32_t rc = sys_atomic_inc(&delivery->ref_count);
     assert(rc > 0 || !delivery->ref_counted);
     delivery->ref_counted = true;
-    if (delivery && delivery->link)
+    if (delivery->link)
         qd_log(delivery->link->core->log, QD_LOG_DEBUG,
                "Delivery incref:    dlv:%lx rc:%"PRIu32" %s", (long) delivery, rc + 1, label);
 }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/46ebb4d8/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 8b08a8a..c27de16 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -353,6 +353,7 @@ static void AMQP_rx_handler(void* context, qd_link_t *link)
                                                        pn_disposition_type(pn_delivery_remote(pnd)),
                                                        pn_disposition_data(pn_delivery_remote(pnd)));
             qdr_node_connect_deliveries(link, delivery, pnd);
+            qdr_delivery_decref(router->router_core, delivery, "release protection of return from deliver_to_routed_link");
         }
 
         return;
@@ -542,6 +543,7 @@ static void AMQP_rx_handler(void* context, qd_link_t *link)
         }
 
         qdr_node_connect_deliveries(link, delivery, pnd);
+        qdr_delivery_decref(router->router_core, delivery, "release protection of return from deliver");
     } else {
         //
         // If there is no delivery, the message is now and will always be unroutable because there is no address.


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