]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
msg/async: msgr2: fix connection fault when replacing
authorRicardo Dias <rdias@suse.com>
Mon, 21 Jan 2019 14:52:40 +0000 (14:52 +0000)
committerRicardo Dias <rdias@suse.com>
Wed, 23 Jan 2019 13:59:29 +0000 (13:59 +0000)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/msg/async/ProtocolV2.cc

index 770acf6907e5ba6b0fb06e2f93f154b79fba3396..392c61690bb54c042cc6aefaf9d9a01e58240ad9 100644 (file)
@@ -625,7 +625,7 @@ CtPtr ProtocolV2::_fault() {
   requeue_sent();
 
   if (out_queue.empty() && state >= START_ACCEPT &&
-      state <= ACCEPTING_SESSION) {
+      state <= ACCEPTING_SESSION && !replacing) {
     ldout(cct, 10) << __func__ << " with nothing to send and in the half "
                    << " accept state just closed" << dendl;
     connection->write_lock.unlock();
@@ -1478,6 +1478,8 @@ CtPtr ProtocolV2::handle_ident(char *payload, uint32_t length) {
 CtPtr ProtocolV2::ready() {
   ldout(cct, 25) << __func__ << dendl;
 
+  replacing = false;
+
   // make sure no pending tick timer
   if (connection->last_tick_id) {
     connection->center->delete_time_event(connection->last_tick_id);
@@ -2947,7 +2949,6 @@ CtPtr ProtocolV2::send_server_ident() {
   connection->inject_delay();
 
   connection->lock.lock();
-  replacing = false;
 
   if (r < 0) {
     ldout(cct, 1) << __func__ << " existing race replacing process for addr = "
@@ -3004,7 +3005,6 @@ CtPtr ProtocolV2::send_reconnect_ok() {
   connection->inject_delay();
 
   connection->lock.lock();
-  replacing = false;
 
   if (r < 0) {
     ldout(cct, 1) << __func__ << " existing race replacing process for addr = "