# HG changeset patch # User tron # Date 1123312517 0 # Node ID 272e091eb99f3c1f9aa7de163ba2ab419a4f4fe6 # Parent 2e27113b0611221c29a32552ede5383b13fa2527 (svn r2813) Plug a thread leak and prevent a race condition which could lead to multiple simultaneous saves and therefore severe corruption diff -r 2e27113b0611 -r 272e091eb99f saveload.c --- a/saveload.c Fri Aug 05 20:22:06 2005 +0000 +++ b/saveload.c Sat Aug 06 07:15:17 2005 +0000 @@ -1245,8 +1245,6 @@ tmp = _sl.buf; - SaveFileStart(); - /* XXX - Setup setjmp error handler if an error occurs anywhere deep during * loading/saving execute a longjmp() and continue execution here */ if (setjmp(_sl.excpt)) { @@ -1325,6 +1323,8 @@ WaitTillSaved(); // nonsense to do an autosave while we were still saving our game, so skip it if (_do_autosave) return SL_OK; + } else { + WaitTillSaved(); } /* Load a TTDLX or TTDPatch game */ @@ -1390,6 +1390,7 @@ SlWriteFill(); // flush the save buffer /* Write to file */ + SaveFileStart(); if (_network_server || (save_thread = OTTDCreateThread(&SaveFileToDisk, NULL)) == NULL) { DEBUG(misc, 1) ("cannot create savegame thread, reverting to single-threaded mode...");