You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2017/08/21 17:56:13 UTC

qpid-dispatch git commit: DISPATCH-810: ensure qd- & qdr- connection objects are bound together before raising event for core thread

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 889644675 -> e8a915648


DISPATCH-810: ensure qd- & qdr- connection objects are bound together before raising event for core thread


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/e8a91564
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/e8a91564
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/e8a91564

Branch: refs/heads/master
Commit: e8a9156489ac9c8d1d4e9c758b31440d5a443a60
Parents: 8896446
Author: Gordon Sim <gs...@redhat.com>
Authored: Fri Aug 18 16:42:27 2017 +0100
Committer: Gordon Sim <gs...@redhat.com>
Committed: Mon Aug 21 18:53:12 2017 +0100

----------------------------------------------------------------------
 include/qpid/dispatch/router_core.h |  6 +++++-
 src/router_core/connections.c       |  8 +++++++-
 src/router_node.c                   | 25 ++++++++++++++-----------
 3 files changed, 26 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8a91564/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 0c47fae..59b11c0 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -140,6 +140,8 @@ typedef enum {
     QDR_ROLE_ON_DEMAND
 } qdr_connection_role_t;
 
+typedef void (*qdr_connection_bind_context_t) (qdr_connection_t *context, void* token);
+
 /**
  * qdr_connection_opened
  *
@@ -170,7 +172,9 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
                                         bool                   strip_annotations_out,
                                         int                    link_capacity,
                                         const char            *vhost,
-                                        qdr_connection_info_t *connection_info);
+                                        qdr_connection_info_t *connection_info,
+                                        qdr_connection_bind_context_t context_binder,
+                                        void* bind_token);
 
 /**
  * qdr_connection_closed

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8a91564/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 65d8bc3..5638c3a 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -68,7 +68,9 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
                                         bool                   strip_annotations_out,
                                         int                    link_capacity,
                                         const char            *vhost,
-                                        qdr_connection_info_t *connection_info)
+                                        qdr_connection_info_t *connection_info,
+                                        qdr_connection_bind_context_t context_binder,
+                                        void                  *bind_token)
 {
     qdr_action_t     *action = qdr_action(qdr_connection_opened_CT, "connection_opened");
     qdr_connection_t *conn   = new_qdr_connection_t();
@@ -97,6 +99,10 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
         strcat(conn->tenant_space, "/");
     }
 
+    if (context_binder) {
+        context_binder(conn, bind_token);
+    }
+
     action->args.connection.conn             = conn;
     action->args.connection.connection_label = qdr_field(label);
     action->args.connection.container_id     = qdr_field(remote_container_id);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8a91564/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 8c964e0..21d52bf 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -616,6 +616,12 @@ static int AMQP_link_detach_handler(void* context, qd_link_t *link, qd_detach_ty
     return 0;
 }
 
+static void bind_connection_context(qdr_connection_t *qdrc, void* token)
+{
+    qd_connection_t *conn = (qd_connection_t*) token;
+    qd_connection_set_context(conn, qdrc);
+    qdr_connection_set_context(qdrc, conn);
+}
 
 static void AMQP_opened_handler(qd_router_t *router, qd_connection_t *conn, bool inbound)
 {
@@ -733,19 +739,16 @@ static void AMQP_opened_handler(qd_router_t *router, qd_connection_t *conn, bool
                                                                  ssl_ssf,
                                                                  is_ssl);
 
-    qdr_connection_t *qdrc = qdr_connection_opened(router->router_core, inbound, role, cost, connection_id, name,
-                                                   pn_connection_remote_container(pn_conn),
-                                                   conn->strip_annotations_in,
-                                                   conn->strip_annotations_out,
-                                                   link_capacity,
-                                                   vhost,
-                                                   connection_info);
-
-    qd_connection_set_context(conn, qdrc);
-    qdr_connection_set_context(qdrc, conn);
+    qdr_connection_opened(router->router_core, inbound, role, cost, connection_id, name,
+                          pn_connection_remote_container(pn_conn),
+                          conn->strip_annotations_in,
+                          conn->strip_annotations_out,
+                          link_capacity,
+                          vhost,
+                          connection_info,
+                          bind_connection_context, conn);
 }
 
-
 static int AMQP_inbound_opened_handler(void *type_context, qd_connection_t *conn, void *context)
 {
     qd_router_t *router = (qd_router_t*) type_context;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org