diff --git a/src/network/protocols/server_lobby.cpp b/src/network/protocols/server_lobby.cpp index 2db4e8ce1..d3b1730e7 100644 --- a/src/network/protocols/server_lobby.cpp +++ b/src/network/protocols/server_lobby.cpp @@ -463,6 +463,7 @@ void ServerLobby::signalRaceStartToClients() */ void ServerLobby::startSelection(const Event *event) { + std::lock_guard lock(m_connection_mutex); if (NetworkConfig::get()->isWAN()) { assert(m_server_registered); @@ -663,6 +664,7 @@ void ServerLobby::clientDisconnected(Event* event) */ void ServerLobby::connectionRequested(Event* event) { + std::lock_guard lock(m_connection_mutex); STKPeer* peer = event->getPeer(); const NetworkString &data = event->data(); diff --git a/src/network/protocols/server_lobby.hpp b/src/network/protocols/server_lobby.hpp index e2769ba73..dff62411b 100644 --- a/src/network/protocols/server_lobby.hpp +++ b/src/network/protocols/server_lobby.hpp @@ -6,6 +6,7 @@ #include "utils/synchronised.hpp" #include +#include #include class ServerLobby : public LobbyProtocol @@ -66,6 +67,10 @@ private: /** Timeout counter for showing the result screen. */ float m_timeout; + /** Lock this mutex whenever a client is connect / disconnect or + * starting race. */ + std::mutex m_connection_mutex; + // connection management void clientDisconnected(Event* event); void connectionRequested(Event* event);