summaryrefslogtreecommitdiff
path: root/saveload.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2005-08-05 08:24:12 +0000
committertron <tron@openttd.org>2005-08-05 08:24:12 +0000
commit484fae74a2ab4a500496eec7af36dd8e34df105e (patch)
treeb50ada0cade250f81d3852f35d9bbe8bef601bae /saveload.c
parent062472161ade0d5e5c725d543b402e004efc175e (diff)
downloadopenttd-484fae74a2ab4a500496eec7af36dd8e34df105e.tar.xz
(svn r2807) Fix two major bugs in the threaded save code:
- Do not dereference a local variable which no longer exists; this lead to random crashes when saving - (Win32) Do not close a handle before it is used last There are still many major problems (race conditions and resulting memory corruption/crashes) left
Diffstat (limited to 'saveload.c')
-rw-r--r--saveload.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/saveload.c b/saveload.c
index f16730434..e036ae748 100644
--- a/saveload.c
+++ b/saveload.c
@@ -1292,7 +1292,6 @@ static bool SaveFileToDisk(void *ptr)
fclose(_sl.fh);
SaveFileDone();
- if (*(bool*)ptr) CloseOTTDThread();
return true;
}
@@ -1364,7 +1363,6 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode)
/* General tactic is to first save the game to memory, then use an available writer
* to write it to file, either in threaded mode if possible, or single-threaded */
if (mode == SL_SAVE) { /* SAVE game */
- bool threaded = true;
fmt = GetSavegameFormat("memory"); // write to memory
_sl.write_bytes = fmt->writer;
@@ -1381,10 +1379,9 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode)
SlWriteFill(); // flush the save buffer
/* Write to file */
- if (_network_server || !CreateOTTDThread(&SaveFileToDisk, &threaded)) {
+ if (_network_server || !CreateOTTDThread(&SaveFileToDisk, NULL)) {
DEBUG(misc, 1) ("cannot create savegame thread, reverting to single-threaded mode...");
- threaded = false;
- SaveFileToDisk(&threaded);
+ SaveFileToDisk(NULL);
}
} else { /* LOAD game */