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/01/20 03:28:48 UTC

qpid-dispatch git commit: DISPATCH-610 - Patch from Ted Ross. Added boolean flag cleared_proton_ref to indicate if a decref has already been performed for the lost reference from the Proton delivery

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 9b8f0efe9 -> 2a7745df9


DISPATCH-610 - Patch from Ted Ross. Added boolean flag cleared_proton_ref to indicate if a decref has already been performed for the lost reference from the Proton delivery


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

Branch: refs/heads/master
Commit: 2a7745df95b406d5c0d3592af7b2341c0d7b7d23
Parents: 9b8f0ef
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Thu Jan 19 22:27:39 2017 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Thu Jan 19 22:27:39 2017 -0500

----------------------------------------------------------------------
 src/router_core/connections.c         | 14 +++++++++++---
 src/router_core/router_core_private.h |  1 +
 2 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a7745df/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 2d88a7b..2f5316c 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -571,7 +571,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
         //
         // Account for the lost reference from the Proton delivery
         //
-        qdr_delivery_decref_CT(core, ref->dlv);
+        if (!ref->dlv->cleared_proton_ref) {
+            qdr_delivery_decref_CT(core, ref->dlv);
+            ref->dlv->cleared_proton_ref = true;
+        }
 
         qdr_del_delivery_ref(&updated_deliveries, ref);
         ref = DEQ_HEAD(updated_deliveries);
@@ -604,8 +607,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
         // Account for the lost reference from the Proton delivery
         // for unsettled deliveries on incoming links
         //
-        if (link->link_direction == QD_INCOMING && !dlv->settled)
+        if (link->link_direction == QD_INCOMING && !dlv->settled && !dlv->cleared_proton_ref) {
             qdr_delivery_decref_CT(core, dlv);
+            dlv->cleared_proton_ref = true;
+        }
         dlv = DEQ_HEAD(undelivered);
     }
 
@@ -645,7 +650,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
         //
         // Account for the lost reference from the Proton delivery
         //
-        qdr_delivery_decref_CT(core, dlv);
+        if (!dlv->cleared_proton_ref) {
+            qdr_delivery_decref_CT(core, dlv);
+            dlv->cleared_proton_ref = true;
+        }
         dlv = DEQ_HEAD(unsettled);
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a7745df/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 d032256..d3b22d1 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -217,6 +217,7 @@ struct qdr_delivery_t {
     qdr_error_t         *error;
     bool                 settled;
     bool                 presettled;
+    bool                 cleared_proton_ref;
     qdr_delivery_where_t where;
     uint8_t              tag[32];
     int                  tag_length;


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