You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2020/12/16 18:07:47 UTC
[qpid-dispatch] branch master updated: DISPATCH-1886 - Close race
window on connection activate/close.
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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org