From 25f003ba5f8ef9d58b794fb718ef8d637fd67c6a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 16 Nov 2012 16:10:30 -0800 Subject: [PATCH] msg/Accepter: only close socket if >= 0 It is possible for rebind() to fail, in which case the OSD will go through it's shutdown procedure and call stop(). This is simpler than trying to avoid calling stop() when rebind() fails. Fixes: #3504 Signed-off-by: Sage Weil --- src/msg/Accepter.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/msg/Accepter.cc b/src/msg/Accepter.cc index 57c32be38883a..b95d26afb0853 100644 --- a/src/msg/Accepter.cc +++ b/src/msg/Accepter.cc @@ -243,15 +243,19 @@ void Accepter::stop() { done = true; ldout(msgr->cct,10) << "stop accepter" << dendl; - assert(listen_sd >= 0); - ::shutdown(listen_sd, SHUT_RDWR); + + if (listen_sd >= 0) { + ::shutdown(listen_sd, SHUT_RDWR); + } // wait for thread to stop before closing the socket, to avoid // racing against fd re-use. join(); - ::close(listen_sd); - listen_sd = -1; + if (listen_sd >= 0) { + ::close(listen_sd); + listen_sd = -1; + } done = false; } -- 2.39.5