(svn r2908) If threaded saving fails or does not happen, sending subsequent messages might hang ottd. So don't send them :)
--- a/saveload.c Fri Sep 02 19:10:45 2005 +0000
+++ b/saveload.c Fri Sep 02 22:22:02 2005 +0000
@@ -1283,6 +1283,8 @@
SaveFileDone();
}
+static Thread* save_thread;
+
/** We have written the whole game into memory, _save_pool, now find
* and appropiate compressor and start writing to file.
*/
@@ -1294,7 +1296,7 @@
static byte *tmp = NULL;
uint32 hdr[2];
- OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_START);
+ if (save_thread != NULL) OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_START);
tmp = _sl.buf;
@@ -1341,13 +1343,10 @@
GetSavegameFormat("memory")->uninit_write(); // clean the memorypool
fclose(_sl.fh);
- OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_DONE);
+ if (save_thread != NULL) OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_DONE);
return NULL;
}
-
-static Thread* save_thread;
-
void WaitTillSaved(void)
{
OTTDJoinThread(save_thread);
@@ -1413,7 +1412,7 @@
ShowInfoF("Load game failed: %s.", _sl.excpt_msg);
return SL_REINIT;
}
-
+
ShowInfoF("Save game failed: %s.", _sl.excpt_msg);
return SL_ERROR;
}