From db44b8d97232386ca7687058dcda937d8db9d60b Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Mon, 16 Mar 2020 14:55:04 -0400 Subject: [PATCH] multiplexed socket: complete shutdown before destroy When shutdown called from callback before it called from destructor sockets could be destroyed. Change-Id: I0fd92646726969c0d9b947a51fecbed495439fb8 --- src/jamidht/multiplexed_socket.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/jamidht/multiplexed_socket.cpp b/src/jamidht/multiplexed_socket.cpp index e8cde3f02f..946b39d5dc 100644 --- a/src/jamidht/multiplexed_socket.cpp +++ b/src/jamidht/multiplexed_socket.cpp @@ -51,7 +51,15 @@ public: }) } { } ~Impl() { - shutdown(); + if (!isShutdown_) { + shutdown(); + } else { + std::lock_guard<std::mutex> lkSockets(socketsMutex); + for (auto& socket : sockets) { + if (socket.second) socket.second->stop(); + } + sockets.clear(); + } } void shutdown() { @@ -68,6 +76,7 @@ public: // No need to write the EOF for the channel, the write will fail because endpoint is already shutdown if (socket.second) socket.second->stop(); } + sockets.clear(); } } -- GitLab