Repository: qpid-dispatch Updated Branches: refs/heads/master 3086de102 -> c069eb0d8
DISPATCH-595 - While processing connection in qdr_connection_process(), deal with deliveries first Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/c069eb0d Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/c069eb0d Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/c069eb0d Branch: refs/heads/master Commit: c069eb0d8fb96903d6f620c1ba9d97fd1b7c1f9f Parents: 3086de1 Author: Ganesh Murthy <[email protected]> Authored: Mon Dec 19 13:59:24 2016 -0500 Committer: Ganesh Murthy <[email protected]> Committed: Mon Dec 19 13:59:24 2016 -0500 ---------------------------------------------------------------------- src/router_core/connections.c | 42 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c069eb0d/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index acb23e8..00e9eb3 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -134,11 +134,32 @@ int qdr_connection_process(qdr_connection_t *conn) qdr_connection_work_list_t work_list; qdr_core_t *core = conn->core; + qdr_link_ref_t *ref; + qdr_link_t *link; + + int event_count = 0; + + do { + sys_mutex_lock(conn->work_lock); + ref = DEQ_HEAD(conn->links_with_deliveries); + if (ref) { + link = ref->link; + qdr_del_link_ref(&conn->links_with_deliveries, ref->link, QDR_LINK_LIST_CLASS_DELIVERY); + } else + link = 0; + sys_mutex_unlock(conn->work_lock); + + if (link) { + core->push_handler(core->user_context, link); + event_count++; + } + } while (link); + sys_mutex_lock(conn->work_lock); DEQ_MOVE(conn->work_list, work_list); sys_mutex_unlock(conn->work_lock); - int event_count = DEQ_SIZE(work_list); + event_count += DEQ_SIZE(work_list); qdr_connection_work_t *work = DEQ_HEAD(work_list); while (work) { DEQ_REMOVE_HEAD(work_list); @@ -173,25 +194,6 @@ int qdr_connection_process(qdr_connection_t *conn) work = DEQ_HEAD(work_list); } - qdr_link_ref_t *ref; - qdr_link_t *link; - - do { - sys_mutex_lock(conn->work_lock); - ref = DEQ_HEAD(conn->links_with_deliveries); - if (ref) { - link = ref->link; - qdr_del_link_ref(&conn->links_with_deliveries, ref->link, QDR_LINK_LIST_CLASS_DELIVERY); - } else - link = 0; - sys_mutex_unlock(conn->work_lock); - - if (link) { - core->push_handler(core->user_context, link); - event_count++; - } - } while (link); - do { sys_mutex_lock(conn->work_lock); ref = DEQ_HEAD(conn->links_with_credit); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
