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

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


The following commit(s) were added to refs/heads/main by this push:
     new 37a6ca1  DISPATCH-2054: Set tracking_addr on deliveries to zero since 
those addresses have already been freed. This closes #1128.
37a6ca1 is described below

commit 37a6ca1fbe486d1eddb7360fc0b73a367b4ea01d
Author: Ganesh Murthy <gmur...@apache.org>
AuthorDate: Thu Apr 15 18:07:45 2021 -0400

    DISPATCH-2054: Set tracking_addr on deliveries to zero since those 
addresses have already been freed. This closes #1128.
---
 src/router_core/connections.c         | 12 +++++++++---
 src/router_core/router_core.c         |  2 +-
 src/router_core/router_core_private.h |  2 +-
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index a7b7b4f..5ee6453 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -746,7 +746,7 @@ static void qdr_generate_link_name(const char *label, char 
*buffer, size_t lengt
 }
 
 
-void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *conn, 
qdr_link_t *link)
+void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *conn, 
qdr_link_t *link, bool on_shutdown)
 {
     //
     // Clean up the lists of deliveries on this link
@@ -766,6 +766,8 @@ void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, 
qdr_connection_t *conn, qd
         if (d->presettled)
             core->dropped_presettled_deliveries++;
         d->where = QDR_DELIVERY_NOWHERE;
+        if (on_shutdown)
+            d->tracking_addr = 0;
         d->link_work = 0;
         d = DEQ_NEXT(d);
     }
@@ -776,6 +778,8 @@ void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, 
qdr_connection_t *conn, qd
         assert(d->where == QDR_DELIVERY_IN_UNSETTLED);
         d->where = QDR_DELIVERY_NOWHERE;
         d->link_work = 0;
+        if (on_shutdown)
+            d->tracking_addr = 0;
         d = DEQ_NEXT(d);
     }
 
@@ -785,6 +789,8 @@ void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, 
qdr_connection_t *conn, qd
         assert(d->where == QDR_DELIVERY_IN_SETTLED);
         d->where = QDR_DELIVERY_NOWHERE;
         d->link_work = 0;
+        if (on_shutdown)
+            d->tracking_addr = 0;
         d = DEQ_NEXT(d);
     }
     sys_mutex_unlock(conn->work_lock);
@@ -1021,7 +1027,7 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, 
qdr_connection_t *conn, qdr_li
     //
     // Clean up any remaining deliveries
     //
-    qdr_link_cleanup_deliveries_CT(core, conn, link);
+    qdr_link_cleanup_deliveries_CT(core, conn, link, false);
 
     //
     // Remove all references to this link in the connection's and owning
@@ -2087,7 +2093,7 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, 
qdr_action_t *action, b
         //
         // Handle the disposition of any deliveries that remain on the link
         //
-        qdr_link_cleanup_deliveries_CT(core, conn, link);
+        qdr_link_cleanup_deliveries_CT(core, conn, link, false);
 
         //
         // If the detach occurred via protocol, send a detach back.
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index 962ecef..eb95e06 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -225,7 +225,7 @@ void qdr_core_free(qdr_core_t *core)
             link->in_streaming_pool = false;
         }
 
-        qdr_link_cleanup_deliveries_CT(core, link->conn, link);
+        qdr_link_cleanup_deliveries_CT(core, link->conn, link, true);
 
         if (link->core_endpoint)
             qdrc_endpoint_do_cleanup_CT(core, link->core_endpoint);
diff --git a/src/router_core/router_core_private.h 
b/src/router_core/router_core_private.h
index 0464b4f..117580e 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -987,7 +987,7 @@ qdr_edge_t *qdr_edge(qdr_core_t *);
 void qdr_edge_free(qdr_edge_t *);
 void qdr_edge_connection_opened(qdr_edge_t *edge, qdr_connection_t *conn);
 void qdr_edge_connection_closed(qdr_edge_t *edge);
-void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *conn, 
qdr_link_t *link);
+void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *conn, 
qdr_link_t *link, bool on_shutdown);
 
 void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
                                     qdr_connection_t      *conn,

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

Reply via email to