Author: tross
Date: Mon Feb 2 13:30:15 2015
New Revision: 1656457
URL: http://svn.apache.org/r1656457
Log:
DISPATCH-6 - Completed link-detach propagation.
Modified:
qpid/dispatch/trunk/src/router_node.c
Modified: qpid/dispatch/trunk/src/router_node.c
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/router_node.c?rev=1656457&r1=1656456&r2=1656457&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/router_node.c (original)
+++ qpid/dispatch/trunk/src/router_node.c Mon Feb 2 13:30:15 2015
@@ -1034,6 +1034,16 @@ typedef struct link_attach_t {
ALLOC_DECLARE(link_attach_t);
ALLOC_DEFINE(link_attach_t);
+
+typedef struct link_detach_t {
+ qd_router_t *router;
+ qd_router_link_t *rlink;
+} link_detach_t;
+
+ALLOC_DECLARE(link_detach_t);
+ALLOC_DEFINE(link_detach_t);
+
+
typedef enum {
LINK_ATTACH_FORWARDED = 1, ///< The attach was forwarded
LINK_ATTACH_NO_MATCH = 2, ///< No link-route address was found
@@ -1082,6 +1092,24 @@ static void qd_router_attach_routed_link
}
+static void qd_router_detach_routed_link(void *context, bool discard)
+{
+ link_detach_t *ld = (link_detach_t*) context;
+
+ if (!discard) {
+ qd_link_t *link = ld->rlink->link;
+ qd_link_close(link);
+
+ sys_mutex_lock(ld->router->lock);
+ qd_entity_cache_remove(QD_ROUTER_LINK_TYPE, ld->rlink);
+ DEQ_REMOVE(ld->router->links, ld->rlink);
+ sys_mutex_unlock(ld->router->lock);
+ }
+
+ free_link_detach_t(ld);
+}
+
+
link_attach_result_t qd_router_link_route(qd_router_t *router,
qd_router_link_t *rlink,
const char *term_addr,
@@ -1383,6 +1411,15 @@ static int router_link_detach_handler(vo
sys_mutex_lock(router->lock);
+ if (rlink->connected_link) {
+ qd_connection_t *out_conn =
qd_link_connection(rlink->connected_link->link);
+ link_detach_t *ld = new_link_detach_t();
+ ld->router = router;
+ ld->rlink = rlink->connected_link;
+ rlink->connected_link->connected_link = 0;
+ qd_connection_invoke_deferred(out_conn, qd_router_detach_routed_link,
ld);
+ }
+
//
// If this link is part of an inter-router connection, drop the
// reference count. If this is the last link on the connection,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]