Use std atomic for timeout

This commit is contained in:
Benau 2018-03-20 09:59:14 +08:00
parent e58d86d4d5
commit dd3a544834
2 changed files with 11 additions and 11 deletions

View File

@ -319,7 +319,7 @@ void ServerLobby::asynchronousUpdate()
} }
break; break;
case SELECTING: case SELECTING:
if (m_timeout < (float)StkTime::getRealTime()) if (m_timeout.load() < (float)StkTime::getRealTime())
{ {
auto result = handleVote(); auto result = handleVote();
// Remove disconnected player (if any) one last time // Remove disconnected player (if any) one last time
@ -426,7 +426,7 @@ void ServerLobby::update(int ticks)
} }
break; break;
case RESULT_DISPLAY: case RESULT_DISPLAY:
if(StkTime::getRealTime() > m_timeout) if(StkTime::getRealTime() > m_timeout.load())
{ {
RaceResultGUI::getInstance()->backToLobby(); RaceResultGUI::getInstance()->backToLobby();
// notify the network world that it is stopped // notify the network world that it is stopped
@ -611,7 +611,7 @@ void ServerLobby::startSelection(const Event *event)
m_state = SELECTING; m_state = SELECTING;
// Will be changed after the first vote received // Will be changed after the first vote received
m_timeout = std::numeric_limits<float>::max(); m_timeout.store(std::numeric_limits<float>::max());
std::make_shared<LatencyProtocol>()->requestStart(); std::make_shared<LatencyProtocol>()->requestStart();
Log::info("LobbyProtocol", "LatencyProtocol started."); Log::info("LobbyProtocol", "LatencyProtocol started.");
@ -685,7 +685,7 @@ void ServerLobby::checkIncomingConnectionRequests()
m_player_ready_counter = 0; m_player_ready_counter = 0;
// Set the delay before the server forces all clients to exit the race // Set the delay before the server forces all clients to exit the race
// result screen and go back to the lobby // result screen and go back to the lobby
m_timeout = (float)(StkTime::getRealTime()+15.0f); m_timeout.store((float)(StkTime::getRealTime()+15.0f));
m_state = RESULT_DISPLAY; m_state = RESULT_DISPLAY;
// calculate karts ranks : // calculate karts ranks :
@ -1039,12 +1039,12 @@ void ServerLobby::playerVote(Event* event)
return; return;
// Check if first vote, if so start counter // Check if first vote, if so start counter
if (m_timeout == std::numeric_limits<float>::max()) if (m_timeout.load() == std::numeric_limits<float>::max())
{ {
m_timeout = (float)StkTime::getRealTime() + m_timeout.store((float)StkTime::getRealTime() +
UserConfigParams::m_voting_timeout; UserConfigParams::m_voting_timeout);
} }
float remaining_time = m_timeout - (float)StkTime::getRealTime(); float remaining_time = m_timeout.load() - (float)StkTime::getRealTime();
if (remaining_time < 0.0f) if (remaining_time < 0.0f)
{ {
return; return;
@ -1054,7 +1054,7 @@ void ServerLobby::playerVote(Event* event)
NetworkString other = NetworkString(PROTOCOL_LOBBY_ROOM); NetworkString other = NetworkString(PROTOCOL_LOBBY_ROOM);
std::string name = StringUtils::wideToUtf8(event->getPeer() std::string name = StringUtils::wideToUtf8(event->getPeer()
->getPlayerProfiles()[0]->getName()); ->getPlayerProfiles()[0]->getName());
other.addUInt8(LE_VOTE).addFloat(m_timeout).encodeString(name) other.addUInt8(LE_VOTE).addFloat(m_timeout.load()).encodeString(name)
.addUInt32(event->getPeer()->getHostId()); .addUInt32(event->getPeer()->getHostId());
other += data; other += data;
@ -1205,7 +1205,7 @@ void ServerLobby::playerFinishedResult(Event *event)
// We can't trigger the world/race exit here, since this is called // We can't trigger the world/race exit here, since this is called
// from the protocol manager thread. So instead we force the timeout // from the protocol manager thread. So instead we force the timeout
// to get triggered (which is done from the main thread): // to get triggered (which is done from the main thread):
m_timeout = 0; m_timeout.store(0);
} }
} // playerFinishedResult } // playerFinishedResult

View File

@ -69,7 +69,7 @@ private:
int m_player_ready_counter; int m_player_ready_counter;
/** Timeout counter for various state. */ /** Timeout counter for various state. */
float m_timeout; std::atomic<float> m_timeout;
/** Lock this mutex whenever a client is connect / disconnect or /** Lock this mutex whenever a client is connect / disconnect or
* starting race. */ * starting race. */