From 5791f5ff8b765272b921a1c0a0b1803138be787c Mon Sep 17 00:00:00 2001 From: Josiah VanderZee Date: Mon, 19 May 2025 09:03:04 -0500 Subject: [PATCH] Change killflag type to `sig_atomic_t` in client --- src/client/clientlauncher.cpp | 11 ++++++----- src/client/game.cpp | 24 +++++++++++++----------- src/client/game.h | 3 ++- src/gui/guiEngine.cpp | 4 +++- src/gui/guiEngine.h | 6 ++++-- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index a770dbcae..d493f033c 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -22,6 +22,7 @@ #include "util/tracy_wrapper.h" #include #include +#include #include #if USE_SOUND @@ -147,8 +148,8 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) /* Menu-game loop */ - bool retval = true; - bool *kill = porting::signal_handler_killstatus(); + bool retval = true; + volatile std::sig_atomic_t *kill = porting::signal_handler_killstatus(); while (m_rendering_engine->run() && !*kill && !g_gamecallback->shutdown_requested) { @@ -529,9 +530,9 @@ bool ClientLauncher::launch_game(std::string &error_message, void ClientLauncher::main_menu(MainMenuData *menudata) { - bool *kill = porting::signal_handler_killstatus(); - video::IVideoDriver *driver = m_rendering_engine->get_video_driver(); - auto *device = m_rendering_engine->get_raw_device(); + volatile std::sig_atomic_t *kill = porting::signal_handler_killstatus(); + video::IVideoDriver *driver = m_rendering_engine->get_video_driver(); + auto *device = m_rendering_engine->get_raw_device(); // Wait until app is in foreground because of #15883 infostream << "Waiting for app to be in foreground" << std::endl; diff --git a/src/client/game.cpp b/src/client/game.cpp index 2c9c4fb77..f9a52c43f 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -65,6 +65,8 @@ #include "client/sound/sound_openal.h" #endif +#include + class NodeDugEvent : public MtEvent { public: @@ -561,7 +563,7 @@ public: Game(); ~Game(); - bool startup(bool *kill, + bool startup(volatile std::sig_atomic_t *kill, InputHandler *input, RenderingEngine *rendering_engine, const GameStartData &game_params, @@ -793,14 +795,14 @@ private: This class does take ownership/responsibily for cleaning up etc of any of these items (e.g. device) */ - IrrlichtDevice *device; - RenderingEngine *m_rendering_engine; - video::IVideoDriver *driver; - scene::ISceneManager *smgr; - bool *kill; - std::string *error_message; - bool *reconnect_requested; - PausedNodesList paused_animated_nodes; + IrrlichtDevice *device; + RenderingEngine *m_rendering_engine; + video::IVideoDriver *driver; + scene::ISceneManager *smgr; + volatile std::sig_atomic_t *kill; + std::string *error_message; + bool *reconnect_requested; + PausedNodesList paused_animated_nodes; bool simple_singleplayer_mode; /* End 'cache' */ @@ -932,7 +934,7 @@ Game::~Game() m_rendering_engine->finalize(); } -bool Game::startup(bool *kill, +bool Game::startup(volatile std::sig_atomic_t *kill, InputHandler *input, RenderingEngine *rendering_engine, const GameStartData &start_data, @@ -4235,7 +4237,7 @@ void Game::readSettings() ****************************************************************************/ /****************************************************************************/ -void the_game(bool *kill, +void the_game(volatile std::sig_atomic_t *kill, InputHandler *input, RenderingEngine *rendering_engine, const GameStartData &start_data, diff --git a/src/client/game.h b/src/client/game.h index 6b838e2bc..95976ac7b 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -6,6 +6,7 @@ #include "irrlichttypes.h" #include "config.h" +#include #include #if !IS_CLIENT_BUILD @@ -36,7 +37,7 @@ struct CameraOrientation { #define GAME_FALLBACK_TIMEOUT 1.8f #define GAME_CONNECTION_TIMEOUT 10.0f -void the_game(bool *kill, +void the_game(volatile std::sig_atomic_t *kill, InputHandler *input, RenderingEngine *rendering_engine, const GameStartData &start_data, diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index 8cc9954fc..c953df3cb 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -33,6 +33,8 @@ #include "client/sound/sound_openal.h" #endif +#include + /******************************************************************************/ void TextDestGuiEngine::gotText(const StringMap &fields) @@ -109,7 +111,7 @@ GUIEngine::GUIEngine(JoystickController *joystick, RenderingEngine *rendering_engine, IMenuManager *menumgr, MainMenuData *data, - bool &kill) : + volatile std::sig_atomic_t &kill) : m_rendering_engine(rendering_engine), m_parent(parent), m_menumanager(menumgr), diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h index 5c95e9a4c..137d3fa31 100644 --- a/src/gui/guiEngine.h +++ b/src/gui/guiEngine.h @@ -14,6 +14,8 @@ #include "util/enriched_string.h" #include "translation.h" +#include + /******************************************************************************/ /* Structs and macros */ /******************************************************************************/ @@ -130,7 +132,7 @@ public: RenderingEngine *rendering_engine, IMenuManager *menumgr, MainMenuData *data, - bool &kill); + volatile std::sig_atomic_t &kill); /** default destructor */ virtual ~GUIEngine(); @@ -199,7 +201,7 @@ private: irr_ptr m_menu; /** reference to kill variable managed by SIGINT handler */ - bool &m_kill; + volatile std::sig_atomic_t &m_kill; /** variable used to abort menu and return back to main game handling */ bool m_startgame = false;