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 2017/10/18 14:43:28 UTC

[06/15] qpid-dispatch git commit: DISPATCH-829 - Added a proton_ref set flag so we can incref and decref accordingly

DISPATCH-829 - Added a proton_ref set flag so we can incref and decref accordingly


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

Branch: refs/heads/master
Commit: 5630becc56002bcb67502bead6f5da07d80078b2
Parents: a1726fa
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Thu Oct 5 17:59:01 2017 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Wed Oct 18 08:11:40 2017 -0400

----------------------------------------------------------------------
 include/qpid/dispatch/router_core.h   |  2 ++
 src/router_core/router_core_private.h |  1 +
 src/router_core/transfer.c            | 10 ++++++++++
 src/router_node.c                     |  8 +++++++-
 4 files changed, 20 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 701cf1c..96bebc9 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -617,6 +617,8 @@ bool qdr_delivery_tag_sent(const qdr_delivery_t *delivery);
 void qdr_delivery_set_tag_sent(const qdr_delivery_t *delivery, bool tag_sent);
 bool qdr_delivery_receive_complete(const qdr_delivery_t *delivery);
 void qdr_delivery_set_cleared_proton_ref(qdr_delivery_t *dlv, bool cleared_proton_ref);
+void qdr_delivery_set_set_proton_ref(qdr_delivery_t *dlv, bool set_proton_ref);
+bool qdr_delivery_get_set_proton_ref(qdr_delivery_t *dlv);
 
 /**
  ******************************************************************************

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 6805e92..de14f5f 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -340,6 +340,7 @@ struct qdr_delivery_t {
     bool                    settled;
     bool                    presettled;
     bool                    cleared_proton_ref;
+    bool                    set_proton_ref;
     qdr_delivery_where_t    where;
     uint8_t                 tag[32];
     int                     tag_length;

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index ac75abe..4756960 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -283,6 +283,16 @@ void qdr_delivery_set_cleared_proton_ref(qdr_delivery_t *dlv, bool cleared_proto
     dlv->cleared_proton_ref = cleared_proton_ref;
 }
 
+void qdr_delivery_set_set_proton_ref(qdr_delivery_t *dlv, bool set_proton_ref)
+{
+    dlv->set_proton_ref = set_proton_ref;
+}
+
+bool qdr_delivery_get_set_proton_ref(qdr_delivery_t *dlv)
+{
+    return dlv->set_proton_ref;
+}
+
 
 void *qdr_delivery_get_context(qdr_delivery_t *delivery)
 {

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 4245189..aadc312 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -1242,6 +1242,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
 {
     qd_router_t *router = (qd_router_t*) context;
     qd_link_t   *qlink  = (qd_link_t*) qdr_link_get_context(link);
+
     if (!qlink)
         return;
 
@@ -1276,6 +1277,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
             if (qdr_delivery_get_context(dlv) == 0)  {
                 pn_delivery_set_context(pdlv, dlv);
                 qdr_delivery_set_context(dlv, pdlv);
+                qdr_delivery_set_set_proton_ref(dlv, true);
                 qdr_delivery_incref(dlv);
             }
         }
@@ -1290,6 +1292,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
     bool restart_rx = false;
 
     qd_message_t *msg_out = qdr_delivery_message(dlv);
+
     qd_message_send(msg_out, qlink, qdr_link_strip_annotations_out(link), &restart_rx);
 
     if (restart_rx) {
@@ -1320,7 +1323,10 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
                 pn_link_advance(plink);
                 pn_delivery_settle(pdlv);
                 qdr_delivery_set_cleared_proton_ref(dlv, true);
-                qdr_delivery_decref(router->router_core, dlv);
+
+                if (qdr_delivery_get_set_proton_ref(dlv)) {
+                    qdr_delivery_decref(router->router_core, dlv);
+                }
             }
 
         } else {


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