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