From 8441cb7ba9ae2fa508bac6f68672e8f523507a27 Mon Sep 17 00:00:00 2001 From: ebbit1q Date: Mon, 23 Nov 2020 02:21:43 +0100 Subject: [PATCH] refactor pingClockTimeout (#4169) * refactor pingClockTimeout try to see if it changes #3954 * use lcoks and unlocks again --- common/server_game.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/common/server_game.cpp b/common/server_game.cpp index 3996c69b8..63db0503b 100644 --- a/common/server_game.cpp +++ b/common/server_game.cpp @@ -169,26 +169,28 @@ void Server_Game::pingClockTimeout() GameEventStorage ges; ges.setGameEventContext(Context_PingChanged()); - QList pingList; - QMapIterator playerIterator(players); bool allPlayersInactive = true; int playerCount = 0; - while (playerIterator.hasNext()) { - Server_Player *player = playerIterator.next().value(); + for (auto *player : players) { + if (player == nullptr) + continue; + if (!player->getSpectator()) ++playerCount; - const int oldPingTime = player->getPingTime(); - player->playerMutex.lock(); + int oldPingTime = player->getPingTime(); int newPingTime; - if (player->getUserInterface()) + player->playerMutex.lock(); + if (player->getUserInterface()) { newPingTime = player->getUserInterface()->getLastCommandTime(); - else + } else { newPingTime = -1; + } player->playerMutex.unlock(); - if ((newPingTime != -1) && !player->getSpectator()) + if ((newPingTime != -1) && !player->getSpectator()) { allPlayersInactive = false; + } if ((abs(oldPingTime - newPingTime) > 1) || ((newPingTime == -1) && (oldPingTime != -1)) || ((newPingTime != -1) && (oldPingTime == -1))) { @@ -203,10 +205,12 @@ void Server_Game::pingClockTimeout() const int maxTime = room->getServer()->getMaxGameInactivityTime(); if (allPlayersInactive) { - if (((++inactivityCounter >= maxTime) && (maxTime > 0)) || (playerCount < maxPlayers)) + if (((maxTime > 0) && (++inactivityCounter >= maxTime)) || (playerCount < maxPlayers)) { deleteLater(); - } else + } + } else { inactivityCounter = 0; + } } int Server_Game::getPlayerCount() const