diff --git a/src/openttd.cpp b/src/openttd.cpp index 1f8b43ef89..c5d4600c9b 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -798,7 +798,10 @@ int openttd_main(int argc, char *argv[]) } #endif /* ENABLE_NETWORK */ - if (!HandleBootstrap()) goto exit; + if (!HandleBootstrap()) { + ShutdownGame(); + goto exit_bootstrap; + } _video_driver->ClaimMousePointer(); @@ -874,29 +877,33 @@ int openttd_main(int argc, char *argv[]) SaveToHighScore(); } -exit: /* Reset windowing system, stop drivers, free used memory, ... */ ShutdownGame(); + goto exit_normal; exit_noshutdown: + /* These three are normally freed before bootstrap. */ + free(graphics_set); + free(videodriver); + free(blitter); + +exit_bootstrap: + /* These are normally freed before exit, but after bootstrap. */ + free(sounds_set); + free(music_set); + free(musicdriver); + free(sounddriver); + +exit_normal: free(BaseGraphics::ini_set); free(BaseSounds::ini_set); free(BaseMusic::ini_set); - free(graphics_set); - free(sounds_set); - free(music_set); - free(_ini_musicdriver); free(_ini_sounddriver); free(_ini_videodriver); free(_ini_blitter); - free(musicdriver); - free(sounddriver); - free(videodriver); - free(blitter); - return ret; }