mon/MonClient: fix shutdown race

While we are shutting down, we should drop all subsequent mon
messages.  Currently it is possible to finish the authentication
sequence *while* we are shutting down, such that a subsequent
attempt to authenticate succeeds.

Fix this by resetting cur_con early in the sequence, as this
makes us drop all incoming messages.

Fixes: http://tracker.ceph.com/issues/13992
Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2016-03-28 10:33:53 -04:00
parent cd3385b59f
commit 5b44a348bf

View File

@ -426,6 +426,11 @@ void MonClient::shutdown()
waiting_for_session.pop_front();
}
if (cur_con)
cur_con->mark_down();
cur_con.reset(NULL);
cur_mon.clear();
monc_lock.Unlock();
if (initialized) {
@ -434,11 +439,6 @@ void MonClient::shutdown()
monc_lock.Lock();
timer.shutdown();
if (cur_con)
cur_con->mark_down();
cur_con.reset(NULL);
cur_mon.clear();
monc_lock.Unlock();
}