You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/04/25 22:12:52 UTC

[3/5] qpid-dispatch git commit: DISPATCH-739: Fix more use of qdr_delivery pointers after decref

DISPATCH-739: Fix more use of qdr_delivery pointers after decref


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

Branch: refs/heads/master
Commit: af6c53eda1bad646a99a88240f9b18e62865d3aa
Parents: 9c7b5e9
Author: Alan Conway <ac...@redhat.com>
Authored: Tue Apr 25 17:24:38 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Apr 25 17:52:46 2017 -0400

----------------------------------------------------------------------
 src/router_core/connections.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/af6c53ed/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index c0c5b0c..20bcf56 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -650,16 +650,17 @@ 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_delivery_decref_CT(core, ref->dlv);
-
         //
-        // Account for the lost reference from the Proton delivery
+        // Account for possible lost reference from the Proton delivery
         //
         if (!ref->dlv->cleared_proton_ref) {
-            qdr_delivery_decref_CT(core, ref->dlv);
             ref->dlv->cleared_proton_ref = true;
+            qdr_delivery_decref_CT(core, ref->dlv);
         }
-
+        //
+        // Now our reference
+        //
+        qdr_delivery_decref_CT(core, ref->dlv);
         qdr_del_delivery_ref(&updated_deliveries, ref);
         ref = DEQ_HEAD(updated_deliveries);
     }
@@ -683,18 +684,18 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
         }
 
         //
-        // Account for the undelivered-list reference
-        //
-        qdr_delivery_decref_CT(core, dlv);
-
-        //
         // Account for the lost reference from the Proton delivery
         // for unsettled deliveries on incoming links
         //
         if (link->link_direction == QD_INCOMING && !dlv->settled && !dlv->cleared_proton_ref) {
-            qdr_delivery_decref_CT(core, dlv);
             dlv->cleared_proton_ref = true;
+            qdr_delivery_decref_CT(core, dlv);
         }
+        //
+        // Now the undelivered-list reference
+        //
+        qdr_delivery_decref_CT(core, dlv);
+
         dlv = DEQ_HEAD(undelivered);
     }
 
@@ -727,17 +728,17 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
         }
 
         //
-        // Account for the unsettled-list reference
-        //
-        qdr_delivery_decref_CT(core, dlv);
-
-        //
         // Account for the lost reference from the Proton delivery
         //
         if (!dlv->cleared_proton_ref) {
             dlv->cleared_proton_ref = true;
             qdr_delivery_decref_CT(core, dlv);
         }
+        //
+        // Now the unsettled-list reference
+        //
+        qdr_delivery_decref_CT(core, dlv);
+
         dlv = DEQ_HEAD(unsettled);
     }
 


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