From 277362a6c7373d9e1aab673fbd43748da1abdce7 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 20 Aug 2010 18:06:03 +0000 Subject: [PATCH] - fixed a possible infinite loop while receiving network packets on clients for network games (found by titi's stack trace dump) --- source/glest_game/network/client_interface.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index 2588e287..ac702cad 100755 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -532,9 +532,11 @@ void ClientInterface::updateKeyframe(int frameCount) int waitCount = 0; //make sure we read the message + time_t receiveTimeElapsed = time(NULL); NetworkMessageCommandList networkMessageCommandList; while(receiveMessage(&networkMessageCommandList) == false && - isConnected() == true) { + isConnected() == true && + difftime(time(NULL),receiveTimeElapsed) <= (messageWaitTimeout / 1000)) { //sleep(waitSleepTime); sleep(0); waitCount++; @@ -582,10 +584,12 @@ void ClientInterface::updateKeyframe(int frameCount) case nmtQuit: { + time_t receiveTimeElapsed = time(NULL); NetworkMessageQuit networkMessageQuit; //if(receiveMessage(&networkMessageQuit)) { while(receiveMessage(&networkMessageQuit) == false && - isConnected() == true) { + isConnected() == true && + difftime(time(NULL),receiveTimeElapsed) <= (messageWaitTimeout / 1000)) { sleep(0); } quit= true; @@ -595,15 +599,14 @@ void ClientInterface::updateKeyframe(int frameCount) case nmtText: { + time_t receiveTimeElapsed = time(NULL); NetworkMessageText networkMessageText; while(receiveMessage(&networkMessageText) == false && - isConnected() == true) { + isConnected() == true && + difftime(time(NULL),receiveTimeElapsed) <= (messageWaitTimeout / 1000)) { sleep(0); } - //chatText = networkMessageText.getText(); - //chatSender = networkMessageText.getSender(); - //chatTeamIndex = networkMessageText.getTeamIndex(); ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex()); this->addChatInfo(msg); }