From 9f5fe63aaa7396bc1678a0be8bc8a069237cbef7 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sun, 1 Nov 2015 22:47:15 -0800 Subject: [PATCH] Reuse dead connection slots. This fixes a memory leak on multiple disconnect/reconnect of the same client. --- src/Dispatcher.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Dispatcher.cpp b/src/Dispatcher.cpp index 060f2d17f6..d5049c82bb 100644 --- a/src/Dispatcher.cpp +++ b/src/Dispatcher.cpp @@ -306,7 +306,16 @@ void DispatcherBase::ServerThreadMain() { std::weak_ptr(conn))); { std::lock_guard lock(m_user_mutex); - m_connections.emplace_back(conn); + // reuse dead connection slots + bool placed = false; + for (auto& c : m_connections) { + if (c->state() == NetworkConnection::kDead) { + c = conn; + placed = true; + break; + } + } + if (!placed) m_connections.emplace_back(conn); conn->Start(); } }