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 2016/04/01 21:47:50 UTC
qpid-dispatch git commit: DISPATCH-177 - Free up connection work
items when a connection is closed.
Repository: qpid-dispatch
Updated Branches:
refs/heads/master 31220576d -> be393a3f2
DISPATCH-177 - Free up connection work items when a connection is closed.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/be393a3f
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/be393a3f
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/be393a3f
Branch: refs/heads/master
Commit: be393a3f21bc1ddd1a4fd493bed046958e5b4cea
Parents: 3122057
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Apr 1 15:47:00 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Apr 1 15:47:00 2016 -0400
----------------------------------------------------------------------
src/router_core/connections.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/be393a3f/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 1920b89..60ae71a 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -881,21 +881,28 @@ static void qdr_connection_closed_CT(qdr_core_t *core, qdr_action_t *action, boo
//
qdr_link_ref_t *link_ref = DEQ_HEAD(conn->links);
while (link_ref) {
- //
- // TODO - if the link is link-routed and has a peer, detach the peer.
- //
+ qdr_link_t *link = link_ref->link;
//
// Clean up the link and all its associated state.
//
- qdr_link_cleanup_CT(core, conn, link_ref->link);
- free_qdr_link_t(link_ref->link);
+ qdr_link_cleanup_CT(core, conn, link); // link_cleanup disconnects and frees the ref.
+ free_qdr_link_t(link);
link_ref = DEQ_HEAD(conn->links);
}
//
// Discard items on the work list
//
+ qdr_connection_work_t *work = DEQ_HEAD(conn->work_list);
+ while (work) {
+ DEQ_REMOVE_HEAD(conn->work_list);
+ qdr_terminus_free(work->source);
+ qdr_terminus_free(work->target);
+ qdr_error_free(work->error);
+ free_qdr_connection_work_t(work);
+ work = DEQ_HEAD(conn->work_list);
+ }
DEQ_REMOVE(core->open_connections, conn);
sys_mutex_free(conn->work_lock);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org