From f4bf218f35aafebd813de8630d024f2fb6069431 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 30 Jun 2019 11:22:26 +0200 Subject: [PATCH] (Menu) We need to tell rarch_menu_running_finished whether we want to exit RetroArch or not - to avoid certain crashes when trying to access the settings pointer - which should already be freed at this point --- command.c | 4 ++-- discord/discord.c | 2 +- menu/cbs/menu_cbs_ok.c | 2 +- network/netplay/netplay_handshake.c | 2 +- retroarch.c | 23 +++++++++++++---------- retroarch.h | 2 +- tasks/task_content.c | 2 +- ui/drivers/ui_cocoatouch.m | 2 +- 8 files changed, 21 insertions(+), 18 deletions(-) diff --git a/command.c b/command.c index 4a9b9e2eee..68bd914c6c 100755 --- a/command.c +++ b/command.c @@ -1913,7 +1913,7 @@ bool command_event(enum event_command cmd, void *data) case CMD_EVENT_MENU_TOGGLE: #ifdef HAVE_MENU if (menu_driver_is_alive()) - rarch_menu_running_finished(); + rarch_menu_running_finished(false); else rarch_menu_running(); #endif @@ -2452,7 +2452,7 @@ TODO: Add a setting for these tweaks */ #endif break; case CMD_EVENT_RESUME: - rarch_menu_running_finished(); + rarch_menu_running_finished(false); if (ui_companion_is_on_foreground()) ui_companion_driver_toggle(false); break; diff --git a/discord/discord.c b/discord/discord.c index 64d07cb965..a27ca3de18 100644 --- a/discord/discord.c +++ b/discord/discord.c @@ -261,7 +261,7 @@ static void handle_discord_join_response(void *ignore, const char *line) #ifdef HAVE_MENU menu_input_dialog_end(); - rarch_menu_running_finished(); + rarch_menu_running_finished(false); #endif */ } diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 9553eda134..ef03fdd693 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -5291,7 +5291,7 @@ static void action_ok_netplay_enable_client_hostname_cb( } menu_input_dialog_end(); - rarch_menu_running_finished(); + rarch_menu_running_finished(false); } #endif diff --git a/network/netplay/netplay_handshake.c b/network/netplay/netplay_handshake.c index 37e1de5be7..f550884b7c 100644 --- a/network/netplay/netplay_handshake.c +++ b/network/netplay/netplay_handshake.c @@ -295,7 +295,7 @@ static void handshake_password(void *ignore, const char *line) #ifdef HAVE_MENU menu_input_dialog_end(); - rarch_menu_running_finished(); + rarch_menu_running_finished(false); #endif } #endif diff --git a/retroarch.c b/retroarch.c index 8de0dc4065..aaa994205d 100644 --- a/retroarch.c +++ b/retroarch.c @@ -14404,7 +14404,7 @@ void rarch_menu_running(void) #endif } -void rarch_menu_running_finished(void) +void rarch_menu_running_finished(bool quit) { #if defined(HAVE_MENU) || defined(HAVE_OVERLAY) const settings_t *settings = (const settings_t*)configuration_settings; @@ -14415,14 +14415,17 @@ void rarch_menu_running_finished(void) /* Prevent stray input */ input_driver_flushing_input = true; - /* Stop menu background music before we exit the menu */ - if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) - audio_driver_mixer_stop_stream(AUDIO_MIXER_SYSTEM_SLOT_BGM); + if (!quit) + /* Stop menu background music before we exit the menu */ + if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) + audio_driver_mixer_stop_stream(AUDIO_MIXER_SYSTEM_SLOT_BGM); + #endif video_driver_set_texture_enable(false, false); #ifdef HAVE_OVERLAY - if (settings->bools.input_overlay_hide_in_menu) - command_event(CMD_EVENT_OVERLAY_INIT, NULL); + if (!quit) + if (settings->bools.input_overlay_hide_in_menu) + command_event(CMD_EVENT_OVERLAY_INIT, NULL); #endif } @@ -15593,7 +15596,7 @@ bool retroarch_main_quit(void) } rarch_ctl(RARCH_CTL_SET_SHUTDOWN, NULL); - rarch_menu_running_finished(); + rarch_menu_running_finished(true); return true; } @@ -16089,7 +16092,7 @@ static enum runloop_state runloop_check_state( } if (!menu_driver_iterate(&iter)) - rarch_menu_running_finished(); + rarch_menu_running_finished(false); if (focused || !runloop_idle) { @@ -16173,7 +16176,7 @@ static enum runloop_state runloop_check_state( { if (rarch_is_initialized && !core_type_is_dummy) { - rarch_menu_running_finished(); + rarch_menu_running_finished(false); menu_event_kb_set(false, RETROK_F1); } } @@ -16185,7 +16188,7 @@ static enum runloop_state runloop_check_state( if (menu_driver_is_alive()) { if (rarch_is_initialized && !core_type_is_dummy) - rarch_menu_running_finished(); + rarch_menu_running_finished(false); } else { diff --git a/retroarch.h b/retroarch.h index 31f4ff62ce..fff85ba8d3 100644 --- a/retroarch.h +++ b/retroarch.h @@ -417,7 +417,7 @@ void runloop_unset(enum runloop_action action); void rarch_menu_running(void); -void rarch_menu_running_finished(void); +void rarch_menu_running_finished(bool quit); bool retroarch_is_on_main_thread(void); diff --git a/tasks/task_content.c b/tasks/task_content.c index 80381f5107..f375afb3e7 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -1383,7 +1383,7 @@ bool task_push_load_content_from_playlist_from_menu( command_event(CMD_EVENT_LOAD_CORE, NULL); #else rarch_ctl(RARCH_CTL_SET_SHUTDOWN, NULL); - rarch_menu_running_finished(); + rarch_menu_running_finished(true); #endif end: diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 02a2bec22f..0c82711846 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -67,7 +67,7 @@ static void rarch_disable_ui(void) rarch_ctl(RARCH_CTL_SET_PAUSED, &boolean); rarch_ctl(RARCH_CTL_SET_IDLE, &boolean); - rarch_menu_running_finished(); + rarch_menu_running_finished(false); } static void ui_companion_cocoatouch_event_command(