]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
AsyncConnection:: Avoid getting stopping connection
authorHaomai Wang <haomaiwang@gmail.com>
Fri, 19 Dec 2014 14:13:31 +0000 (22:13 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Tue, 23 Dec 2014 11:22:09 +0000 (19:22 +0800)
Now AsyncConnection::_stop may consume a little time on deleting time events,
it may occur that accepting a connection get this stopping connection
because unregister call isn't met.

Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/msg/async/AsyncConnection.cc

index 1fa1bf73f28b83e17b37ef910a87f6bdf153f981..5a0cf46c3c284bcdb661635a051cddfb7d3ea4c4 100644 (file)
@@ -1905,6 +1905,7 @@ void AsyncConnection::_stop()
   ldout(async_msgr->cct, 10) << __func__ << dendl;
   if (sd > 0)
     center->delete_file_event(sd, EVENT_READABLE|EVENT_WRITABLE);
+  async_msgr->unregister_conn(this);
   shutdown_socket();
   discard_out_queue();
   open_write = false;
@@ -1915,7 +1916,6 @@ void AsyncConnection::_stop()
   for (set<uint64_t>::iterator it = register_time_events.begin();
        it != register_time_events.end(); ++it)
     center->delete_time_event(*it);
-  async_msgr->unregister_conn(this);
   // Here we need to dispatch "signal" event, because we want to ensure signal
   // it after all events called by this "_stop" has be done.
   center->dispatch_event_external(signal_handler);