From c12a152ec972309a87ab1637091990520ce9c123 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 17 Jun 2021 18:58:59 +0200 Subject: [PATCH] Fix: thread safety issue during exiting the game (#9380) _exit_game is read by the draw-thread to know when to exit, but most of the time written by the game-thread. --- src/gfx.cpp | 2 +- src/openttd.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index d787dc26f6..ff2c80bfc0 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -41,7 +41,7 @@ bool _right_button_down; ///< Is right mouse button pressed? bool _right_button_clicked; ///< Is right mouse button clicked? DrawPixelInfo _screen; bool _screen_disable_anim = false; ///< Disable palette animation (important for 32bpp-anim blitter during giant screenshot) -bool _exit_game; +std::atomic _exit_game; GameMode _game_mode; SwitchMode _switch_mode; ///< The next mainloop command. PauseMode _pause_mode; diff --git a/src/openttd.h b/src/openttd.h index 2cd9cc1f09..6473168ee1 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -10,6 +10,7 @@ #ifndef OPENTTD_H #define OPENTTD_H +#include #include "core/enum_type.hpp" /** Mode which defines the state of the game. */ @@ -52,7 +53,7 @@ enum DisplayOptions { extern GameMode _game_mode; extern SwitchMode _switch_mode; -extern bool _exit_game; +extern std::atomic _exit_game; extern bool _save_config; /** Modes of pausing we've got */