From: John Spray Date: Wed, 26 Feb 2014 16:29:20 +0000 (+0000) Subject: msg: Make SimpleMessenger shutdown safer X-Git-Tag: v0.79~183^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F1353%2Fhead;p=ceph.git msg: Make SimpleMessenger shutdown safer ...in the case where no dispatchers were ever added, previously we would throw an assertion in wait(). Signed-off-by: John Spray --- diff --git a/src/msg/Accepter.cc b/src/msg/Accepter.cc index 5eebb2eec61f..eb578cd9ed82 100644 --- a/src/msg/Accepter.cc +++ b/src/msg/Accepter.cc @@ -247,7 +247,9 @@ void Accepter::stop() // wait for thread to stop before closing the socket, to avoid // racing against fd re-use. - join(); + if (is_started()) { + join(); + } if (listen_sd >= 0) { ::close(listen_sd); diff --git a/src/msg/DispatchQueue.h b/src/msg/DispatchQueue.h index df7313035923..dffd65cc54ef 100644 --- a/src/msg/DispatchQueue.h +++ b/src/msg/DispatchQueue.h @@ -168,6 +168,7 @@ class DispatchQueue { void entry(); void wait(); void shutdown(); + bool is_started() {return dispatch_thread.is_started();} DispatchQueue(CephContext *cct, SimpleMessenger *msgr) : cct(cct), msgr(msgr), diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 78e0e69835b6..e11783dd0ab5 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -509,10 +509,12 @@ void SimpleMessenger::wait() } lock.Unlock(); - ldout(cct,10) << "wait: waiting for dispatch queue" << dendl; - dispatch_queue.wait(); - ldout(cct,10) << "wait: dispatch queue is stopped" << dendl; - + if(dispatch_queue.is_started()) { + ldout(cct,10) << "wait: waiting for dispatch queue" << dendl; + dispatch_queue.wait(); + ldout(cct,10) << "wait: dispatch queue is stopped" << dendl; + } + // done! clean up. if (did_bind) { ldout(cct,20) << "wait: stopping accepter thread" << dendl;