|
@@ -1496,13 +1496,13 @@ void SaveFileError()
|
|
|
{
|
|
|
SetDParamStr(0, GetSaveLoadErrorString());
|
|
|
ShowErrorMessage(STR_012D, STR_NULL, 0, 0);
|
|
|
SaveFileDone();
|
|
|
}
|
|
|
|
|
|
static OTTDThread* save_thread;
|
|
|
static ThreadObject *save_thread;
|
|
|
|
|
|
/** We have written the whole game into memory, _Savegame_pool, now find
|
|
|
* and appropiate compressor and start writing to file.
|
|
|
*/
|
|
|
static SaveOrLoadResult SaveFileToDisk(bool threaded)
|
|
|
{
|
|
@@ -1558,21 +1558,23 @@ static SaveOrLoadResult SaveFileToDisk(b
|
|
|
SaveFileError();
|
|
|
}
|
|
|
return SL_ERROR;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void* SaveFileToDiskThread(void *arg)
|
|
|
static void * CDECL SaveFileToDiskThread(void *arg)
|
|
|
{
|
|
|
SaveFileToDisk(true);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
void WaitTillSaved()
|
|
|
{
|
|
|
OTTDJoinThread(save_thread);
|
|
|
if (save_thread == NULL) return;
|
|
|
|
|
|
save_thread->Join();
|
|
|
save_thread = NULL;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Main Save or Load function where the high-level saveload functions are
|
|
|
* handled. It opens the savegame, selects format and checks versions
|
|
@@ -1638,13 +1640,13 @@ SaveOrLoadResult SaveOrLoad(const char *
|
|
|
BeforeSaveGame();
|
|
|
SlSaveChunks();
|
|
|
SlWriteFill(); // flush the save buffer
|
|
|
|
|
|
SaveFileStart();
|
|
|
if (_network_server ||
|
|
|
(save_thread = OTTDCreateThread(&SaveFileToDiskThread, NULL)) == NULL) {
|
|
|
(save_thread = ThreadObject::New(&SaveFileToDiskThread, NULL)) == NULL) {
|
|
|
if (!_network_server) DEBUG(sl, 1, "Cannot create savegame thread, reverting to single-threaded mode...");
|
|
|
|
|
|
SaveOrLoadResult result = SaveFileToDisk(false);
|
|
|
SaveFileDone();
|
|
|
|
|
|
return result;
|