diff options
author | tron <tron@openttd.org> | 2005-08-05 08:24:12 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2005-08-05 08:24:12 +0000 |
commit | 484fae74a2ab4a500496eec7af36dd8e34df105e (patch) | |
tree | b50ada0cade250f81d3852f35d9bbe8bef601bae /saveload.c | |
parent | 062472161ade0d5e5c725d543b402e004efc175e (diff) | |
download | openttd-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.c | 7 |
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 */ |