From bb5387fbdb90ec5e3b387ed73718b281b207252b Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Fri, 28 Jun 2024 17:09:13 +1000 Subject: [PATCH] fix seemingly extremely rare race condition leading to exception when joining a singleplayer internal server happened when the client thread called universeServer->setPause (which locks m_clientsLock) between the client id being added to m_clients and the connection being added to m_connectionServer --- source/game/StarUniverseServer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp index 7317e52..2bc2c45 100644 --- a/source/game/StarUniverseServer.cpp +++ b/source/game/StarUniverseServer.cpp @@ -1679,6 +1679,7 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe(clientId, remoteAddress, clientConnect->playerUuid, clientConnect->playerName, clientConnect->playerSpecies, administrator, clientConnect->shipChunks); m_clients.add(clientId, clientContext); + m_connectionServer->addConnection(clientId, std::move(connection)); clientsLocker.unlock(); clientContext->registerRpcHandlers(m_teamManager->rpcHandlers()); @@ -1700,8 +1701,6 @@ void UniverseServer::acceptConnection(UniverseConnection connection, MaybesetAdmin(false); clientContext->setShipUpgrades(clientConnect->shipUpgrades); - - m_connectionServer->addConnection(clientId, std::move(connection)); m_chatProcessor->connectClient(clientId, clientConnect->playerName); m_connectionServer->sendPackets(clientId, {