]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: increase worker reference with local listen table enabled backend 15897/head
authorHaomai Wang <haomai@xsky.com>
Sat, 24 Jun 2017 07:59:02 +0000 (15:59 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 30 Jun 2017 03:28:23 +0000 (11:28 +0800)
Fixes: http://tracker.ceph.com/issues/20390
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/AsyncMessenger.cc

index 4695844055f122e965b1260308dc0477c46de9a7..009ff7ac4204999341cb0a64bae2a7c03e298399 100644 (file)
@@ -165,12 +165,16 @@ void Processor::accept()
   opts.nodelay = msgr->cct->_conf->ms_tcp_nodelay;
   opts.rcbuf_size = msgr->cct->_conf->ms_tcp_rcvbuf;
   opts.priority = msgr->get_socket_priority();
+  Worker *w;
   while (true) {
     entity_addr_t addr;
     ConnectedSocket cli_socket;
-    Worker *w = worker;
-    if (!msgr->get_stack()->support_local_listen_table())
+    if (msgr->get_stack()->support_local_listen_table()) {
+      w = worker;
+      w->references++;
+    } else {
       w = msgr->get_stack()->get_worker();
+    }
     int r = listen_socket.accept(&cli_socket, opts, &addr, w);
     if (r == 0) {
       ldout(msgr->cct, 10) << __func__ << " accepted incoming on sd " << cli_socket.fd() << dendl;
@@ -178,6 +182,7 @@ void Processor::accept()
       msgr->add_accept(w, std::move(cli_socket), addr);
       continue;
     } else {
+      w->release_worker();
       if (r == -EINTR) {
         continue;
       } else if (r == -EAGAIN) {