This is an automated email from the ASF dual-hosted git repository. tross pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/master by this push: new d7215f3 DISPATCH-1886 - Close race window on connection activate/close. d7215f3 is described below commit d7215f378e3a2f5bd8c01071fc6cd4cc1b5120a2 Author: Ted Ross <tr...@apache.org> AuthorDate: Mon Dec 14 13:16:53 2020 -0500 DISPATCH-1886 - Close race window on connection activate/close. --- include/qpid/dispatch/container.h | 1 - src/container.c | 21 --------------------- src/router_node.c | 8 ++++++-- src/server.c | 2 ++ 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/include/qpid/dispatch/container.h b/include/qpid/dispatch/container.h index 6364ff0..2f2850b 100644 --- a/include/qpid/dispatch/container.h +++ b/include/qpid/dispatch/container.h @@ -224,7 +224,6 @@ pn_terminus_t *qd_link_source(qd_link_t *link); pn_terminus_t *qd_link_target(qd_link_t *link); pn_terminus_t *qd_link_remote_source(qd_link_t *link); pn_terminus_t *qd_link_remote_target(qd_link_t *link); -void qd_link_activate(qd_link_t *link); void qd_link_close(qd_link_t *link); void qd_link_detach(qd_link_t *link); void qd_link_free(qd_link_t *link); diff --git a/src/container.c b/src/container.c index c535988..2989633 100644 --- a/src/container.c +++ b/src/container.c @@ -1093,27 +1093,6 @@ pn_terminus_t *qd_link_remote_target(qd_link_t *link) } -void qd_link_activate(qd_link_t *link) -{ - if (!link || !link->pn_link) - return; - - pn_session_t *sess = pn_link_session(link->pn_link); - if (!sess) - return; - - pn_connection_t *conn = pn_session_connection(sess); - if (!conn) - return; - - qd_connection_t *ctx = pn_connection_get_context(conn); - if (!ctx) - return; - - qd_server_activate(ctx); -} - - void qd_link_close(qd_link_t *link) { if (link->pn_link) diff --git a/src/router_node.c b/src/router_node.c index aa4cf04..cd4b94c 100644 --- a/src/router_node.c +++ b/src/router_node.c @@ -1407,10 +1407,14 @@ static int AMQP_outbound_opened_handler(void *type_context, qd_connection_t *con static int AMQP_closed_handler(void *type_context, qd_connection_t *conn, void *context) { - qdr_connection_t *qdrc = (qdr_connection_t*) qd_connection_get_context(conn); + qdr_connection_t *qdrc = (qdr_connection_t*) qd_connection_get_context(conn); + qd_router_t *router = (qd_router_t*) type_context; if (qdrc) { - qdr_connection_set_context(qdrc, NULL); + sys_mutex_lock(qd_server_get_activation_lock(router->qd->server)); + qdr_connection_set_context(qdrc, 0); + sys_mutex_unlock(qd_server_get_activation_lock(router->qd->server)); + qdr_connection_closed(qdrc); qd_connection_set_context(conn, 0); } diff --git a/src/server.c b/src/server.c index b51d0cd..6382025 100644 --- a/src/server.c +++ b/src/server.c @@ -1578,7 +1578,9 @@ void qd_connection_invoke_deferred(qd_connection_t *conn, qd_deferred_t call, vo DEQ_INSERT_TAIL(conn->deferred_calls, dc); sys_mutex_unlock(conn->deferred_call_lock); + sys_mutex_lock(conn->server->conn_activation_lock); qd_server_activate(conn); + sys_mutex_unlock(conn->server->conn_activation_lock); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org