From fab6e824c407a8c501ebdb519ed8201729bd3f20 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 10 Jul 2012 13:32:10 -0700 Subject: [PATCH] msg/DispatchQueue: queue and deliver accept events Signed-off-by: Sage Weil --- src/msg/DispatchQueue.cc | 7 +++++++ src/msg/DispatchQueue.h | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/msg/DispatchQueue.cc b/src/msg/DispatchQueue.cc index b472e855a6133..27a3f60f464a3 100644 --- a/src/msg/DispatchQueue.cc +++ b/src/msg/DispatchQueue.cc @@ -210,6 +210,13 @@ void DispatchQueue::entry() lock.Unlock(); msgr->ms_deliver_handle_connect(con); con->put(); + } else if ((long)m == DispatchQueue::D_ACCEPT) { + lock.Lock(); + Connection *con = accept_q.front(); + accept_q.pop_front(); + lock.Unlock(); + msgr->ms_deliver_handle_accept(con); + con->put(); } else if ((long)m == DispatchQueue::D_BAD_RESET) { lock.Lock(); Connection *con = reset_q.front(); diff --git a/src/msg/DispatchQueue.h b/src/msg/DispatchQueue.h index e7a32c1dbb0de..a7b91bd519093 100644 --- a/src/msg/DispatchQueue.h +++ b/src/msg/DispatchQueue.h @@ -83,8 +83,8 @@ struct DispatchQueue { map::iterator> queued_pipe_iters; atomic_t qlen; - enum { D_CONNECT = 1, D_BAD_REMOTE_RESET, D_BAD_RESET, D_NUM_CODES }; - list connect_q; + enum { D_CONNECT = 1, D_ACCEPT, D_BAD_REMOTE_RESET, D_BAD_RESET, D_NUM_CODES }; + list connect_q, accept_q; list remote_reset_q; list reset_q; @@ -123,6 +123,16 @@ struct DispatchQueue { lock.Unlock(); local_delivery((Message*)D_CONNECT, CEPH_MSG_PRIO_HIGHEST); } + void queue_accept(Connection *con) { + lock.Lock(); + if (stop) { + lock.Unlock(); + return; + } + accept_q.push_back(con->get()); + lock.Unlock(); + local_delivery((Message*)D_ACCEPT, CEPH_MSG_PRIO_HIGHEST); + } void queue_remote_reset(Connection *con) { lock.Lock(); if (stop) { -- 2.39.5