(svn r22070) -Fix [FS#4503] (r21399): crashes when disconnecting after requesting the map

This commit is contained in:
rubidium 2011-02-12 21:30:57 +00:00
parent a19bc28aba
commit befa79ba4a
3 changed files with 7 additions and 3 deletions

View File

@ -181,8 +181,12 @@ ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler()
if (this->savegame != NULL) this->savegame->cs = NULL;
if (this->savegame_mutex != NULL) this->savegame_mutex->EndCritical();
/* Make sure the saving is completely cancelled. */
if (this->savegame != NULL) WaitTillSaved();
/* Make sure the saving is completely cancelled.
* Yes, we need to handle the save finish as well
* as the next connection in this "loop" might
* just be requesting the map and such. */
WaitTillSaved();
ProcessAsyncSaveFinish();
while (this->savegame_packets != NULL) {
Packet *p = this->savegame_packets->next;

View File

@ -75,7 +75,6 @@ void IncreaseDate();
void DoPaletteAnimations();
void MusicLoop();
void ResetMusic();
void ProcessAsyncSaveFinish();
void CallWindowTickEvent();
extern void SetDifficultyLevel(int mode, DifficultySettings *gm_opt);

View File

@ -54,6 +54,7 @@ void SetSaveLoadError(uint16 str);
const char *GetSaveLoadErrorString();
SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, bool threaded = true);
void WaitTillSaved();
void ProcessAsyncSaveFinish();
void DoExitSave();
SaveOrLoadResult SaveWithFilter(struct SaveFilter *writer, bool threaded);