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 23558e0 DISPATCH-2032: Zero out the link_work references on delivery during link cleanup. This closes #1122. 23558e0 is described below commit 23558e059081ce0a28aa933e45b464b928c52d76 Author: Ganesh Murthy <gmur...@apache.org> AuthorDate: Wed Apr 14 14:24:52 2021 -0400 DISPATCH-2032: Zero out the link_work references on delivery during link cleanup. This closes #1122. --- src/router_core/connections.c | 5 ++++- src/router_core/router_core.c | 4 ++++ src/router_core/router_core_private.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 27ceb81..a7b7b4f 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 } -static 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) { // // Clean up the lists of deliveries on this link @@ -766,6 +766,7 @@ static void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *c if (d->presettled) core->dropped_presettled_deliveries++; d->where = QDR_DELIVERY_NOWHERE; + d->link_work = 0; d = DEQ_NEXT(d); } @@ -774,6 +775,7 @@ static void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *c while (d) { assert(d->where == QDR_DELIVERY_IN_UNSETTLED); d->where = QDR_DELIVERY_NOWHERE; + d->link_work = 0; d = DEQ_NEXT(d); } @@ -782,6 +784,7 @@ static void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *c while (d) { assert(d->where == QDR_DELIVERY_IN_SETTLED); d->where = QDR_DELIVERY_NOWHERE; + d->link_work = 0; d = DEQ_NEXT(d); } sys_mutex_unlock(conn->work_lock); diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c index 83e687b..962ecef 100644 --- a/src/router_core/router_core.c +++ b/src/router_core/router_core.c @@ -224,8 +224,12 @@ void qdr_core_free(qdr_core_t *core) DEQ_REMOVE_N(STREAMING_POOL, link->conn->streaming_link_pool, link); link->in_streaming_pool = false; } + + qdr_link_cleanup_deliveries_CT(core, link->conn, link); + if (link->core_endpoint) qdrc_endpoint_do_cleanup_CT(core, link->core_endpoint); + qdr_del_link_ref(&link->conn->links, link, QDR_LINK_LIST_CLASS_CONNECTION); qdr_del_link_ref(&link->conn->links_with_work[link->priority], link, QDR_LINK_LIST_CLASS_WORK); free(link->name); diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h index 28f5140..0464b4f 100644 --- a/src/router_core/router_core_private.h +++ b/src/router_core/router_core_private.h @@ -987,6 +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_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