]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/DispatchQueue: queue and deliver accept events
authorSage Weil <sage@inktank.com>
Tue, 10 Jul 2012 20:32:10 +0000 (13:32 -0700)
committerSage Weil <sage@inktank.com>
Tue, 10 Jul 2012 20:59:21 +0000 (13:59 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
src/msg/DispatchQueue.cc
src/msg/DispatchQueue.h

index b472e855a61336c34f64171c89dcb3e9f19c5b74..27a3f60f464a3ae5e41be05f691037def603f981 100644 (file)
@@ -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();
index e7a32c1dbb0def476f67c60c5bdd150b6ce1f241..a7b91bd519093f29e4f9c23dbb90a95177849a4d 100644 (file)
@@ -83,8 +83,8 @@ struct DispatchQueue {
   map<int, xlist<IncomingQueue *>::iterator> queued_pipe_iters;
   atomic_t qlen;
     
-  enum { D_CONNECT = 1, D_BAD_REMOTE_RESET, D_BAD_RESET, D_NUM_CODES };
-  list<Connection*> connect_q;
+  enum { D_CONNECT = 1, D_ACCEPT, D_BAD_REMOTE_RESET, D_BAD_RESET, D_NUM_CODES };
+  list<Connection*> connect_q, accept_q;
   list<Connection*> remote_reset_q;
   list<Connection*> 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) {