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