From a08e46f279ad946107e0e1571f57b2299ec2c152 Mon Sep 17 00:00:00 2001
From: Benau <Benau@users.noreply.github.com>
Date: Mon, 4 Jun 2018 13:47:37 +0800
Subject: [PATCH] Remove the keys too after selection

---
 src/network/protocols/server_lobby.cpp | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/network/protocols/server_lobby.cpp b/src/network/protocols/server_lobby.cpp
index 0b6c16d7c..76b0e3979 100644
--- a/src/network/protocols/server_lobby.cpp
+++ b/src/network/protocols/server_lobby.cpp
@@ -592,14 +592,6 @@ void ServerLobby::startSelection(const Event *event)
         return;
     }
 
-    // Drop all pending players
-    for (auto& p : m_pending_connection)
-    {
-        if (auto peer = p.first.lock())
-            peer->disconnect();
-    }
-    m_pending_connection.clear();
-
     if (m_server_registered)
     {
         unregisterServer(false/*now*/);
@@ -648,6 +640,16 @@ void ServerLobby::startSelection(const Event *event)
     delete ns;
 
     m_state = SELECTING;
+    // Drop all pending players and keys
+    for (auto& p : m_pending_connection)
+    {
+        if (auto peer = p.first.lock())
+            peer->disconnect();
+    }
+    m_pending_connection.clear();
+    std::unique_lock<std::mutex> ul(m_keys_mutex);
+    m_keys.clear();
+    ul.unlock();
 
     // Will be changed after the first vote received
     m_timeout.store(std::numeric_limits<float>::max());