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 2021/04/16 13:28:53 UTC
[qpid-dispatch] branch main updated: DISPATCH-2054: Set
tracking_addr on deliveries to zero since those addresses have already been
freed. This closes #1128.
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 <gm...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org