From 8571beb2dcb552f68edaea8c5ed25e22e4211c41 Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Tue, 8 Jan 2019 07:57:40 +0100 Subject: [PATCH] windows/server: Fix crash when disconnecting sockets --- source/windows/server.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/windows/server.cpp b/source/windows/server.cpp index a1e3264..29869c5 100644 --- a/source/windows/server.cpp +++ b/source/windows/server.cpp @@ -194,6 +194,7 @@ void datapath::windows::server::_watcher() // Verify existing connections. { + std::list to_kill; std::unique_lock ul(this->lock); for (auto itr = this->active_sockets.begin(); itr != this->active_sockets.end(); itr++) { if (itr->second.expired()) { @@ -204,7 +205,7 @@ void datapath::windows::server::_watcher() } else { DisconnectNamedPipe(itr->first); CloseHandle(itr->first); - this->sockets.remove(itr->first); + to_kill.push_back(itr->first); } this->active_sockets.erase(itr); continue; @@ -218,12 +219,15 @@ void datapath::windows::server::_watcher() } else { DisconnectNamedPipe(itr->first); CloseHandle(itr->first); - this->sockets.remove(itr->first); + to_kill.push_back(itr->first); } this->active_sockets.erase(itr); continue; } } + for (auto hnd : to_kill) { + this->active_sockets.erase(hnd); + } } if (ovmap.size() == 0) {