msgr: close accepting_pipes from mark_down_all()

We need to catch these pipes too, particularly when doing a rebind(),
to avoid them leaking through.

Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2013-07-15 17:16:23 -07:00
parent dd4addef2d
commit 687fe888b3

View File

@ -561,6 +561,18 @@ void SimpleMessenger::mark_down_all()
{
ldout(cct,1) << "mark_down_all" << dendl;
lock.Lock();
for (set<Pipe*>::iterator q = accepting_pipes.begin(); q != accepting_pipes.end(); ++q) {
Pipe *p = *q;
ldout(cct,5) << "mark_down_all accepting_pipe " << p << dendl;
p->pipe_lock.Lock();
p->stop();
ConnectionRef con = p->connection_state;
if (con && con->clear_pipe(p))
dispatch_queue.queue_reset(con.get());
p->pipe_lock.Unlock();
}
accepting_pipes.clear();
while (!rank_pipe.empty()) {
hash_map<entity_addr_t,Pipe*>::iterator it = rank_pipe.begin();
Pipe *p = it->second;