diff --git a/command_event.c b/command_event.c index 23c17586aa..c5347d777d 100644 --- a/command_event.c +++ b/command_event.c @@ -1375,7 +1375,8 @@ bool event_cmd_ctl(enum event_command cmd, void *data) rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); break; case EVENT_CMD_RESTART_RETROARCH: - frontend_driver_set_fork(true, false, true); + if (!frontend_driver_set_fork(true, false, true)) + return false; break; case EVENT_CMD_MENU_SAVE_CURRENT_CONFIG: event_save_current_config(); diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index e2b541a816..9d0665c285 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -370,7 +370,7 @@ static void frontend_gx_process_args(int *argc, char *argv[]) } #ifdef HW_RVL -static void frontend_gx_set_fork(bool exitspawn, bool start_game, bool restart) +static bool frontend_gx_set_fork(bool exitspawn, bool start_game, bool restart) { #ifndef IS_SALAMANDER if (restart) @@ -395,6 +395,8 @@ static void frontend_gx_set_fork(bool exitspawn, bool start_game, bool restart) #ifndef IS_SALAMANDER rarch_ctl(RARCH_CTL_FORCE_QUIT, NULL); #endif + + return true; } #endif diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index debe53922d..0e5b03b3f3 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -2121,11 +2121,16 @@ static int frontend_android_parse_drive_list(void *data) #endif #ifndef HAVE_DYNAMIC -static void frontend_linux_set_fork(bool exitspawn, +static bool frontend_linux_set_fork(bool exitspawn, bool start_game, bool restart) { exit_spawn = exitspawn; exitspawn_start_game = start_game; + + if (restart) /* not implemented */ + return false; + + return true; } static void frontend_linux_exec(const char *path, bool should_load_game) diff --git a/frontend/drivers/platform_ps3.c b/frontend/drivers/platform_ps3.c index 431dc53f86..bb78d06f5c 100644 --- a/frontend/drivers/platform_ps3.c +++ b/frontend/drivers/platform_ps3.c @@ -328,10 +328,12 @@ static void frontend_ps3_deinit(void *data) } #ifndef IS_SALAMANDER -static void frontend_ps3_set_fork(bool exit, bool start_game, bool restart) +static bool frontend_ps3_set_fork(bool exit, bool start_game, bool restart) { exit_spawn = exitspawn; exitspawn_start_game = start_game; + + return true; } #endif diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index 6547ab921d..74819c572a 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -269,10 +269,12 @@ static void frontend_psp_exec(const char *path, bool should_load_game) #endif } -static void frontend_psp_set_fork(bool exit, bool start_game, bool restart) +static bool frontend_psp_set_fork(bool exit, bool start_game, bool restart) { - exit_spawn = true; + exit_spawn = true; exitspawn_start_game = start_game; + + return true; } static void frontend_psp_exitspawn(char *s, size_t len) diff --git a/frontend/drivers/platform_xdk.cpp b/frontend/drivers/platform_xdk.cpp index c48631c720..e88bd0e498 100644 --- a/frontend/drivers/platform_xdk.cpp +++ b/frontend/drivers/platform_xdk.cpp @@ -1292,10 +1292,12 @@ static void frontend_xdk_exec(const char *path, bool should_load_game) #endif } -static void frontend_xdk_set_fork(bool exit, bool start_game, bool restart) +static bool frontend_xdk_set_fork(bool exit, bool start_game, bool restart) { exit_spawn = exit; exitspawn_start_game = start_game; + + return true; } static void frontend_xdk_exitspawn(char *s, size_t len) diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 9e071bcc7d..546d89fd9c 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -214,13 +214,13 @@ bool frontend_driver_has_fork(void) return true; } -void frontend_driver_set_fork(bool a, bool b, bool restart) +bool frontend_driver_set_fork(bool a, bool b, bool restart) { frontend_ctx_driver_t *frontend = frontend_get_ptr(); if (!frontend_driver_has_fork()) - return; - frontend->set_fork(a, b, restart); + return false; + return frontend->set_fork(a, b, restart); } void frontend_driver_process_args(int *argc, char *argv[]) diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index af58e8ae8d..f23949888a 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -64,7 +64,7 @@ typedef struct frontend_ctx_driver process_args_t process_args; void (*exec)(const char *, bool); - void (*set_fork)(bool exitspawn, bool start_game, bool restart); + bool (*set_fork)(bool exitspawn, bool start_game, bool restart); void (*shutdown)(bool); void (*get_name)(char *, size_t); void (*get_os)(char *, size_t, int *major, int *minor); @@ -116,7 +116,7 @@ int frontend_driver_parse_drive_list(void *data); void frontend_driver_content_loaded(void); -void frontend_driver_set_fork(bool a, bool b, bool restart); +bool frontend_driver_set_fork(bool a, bool b, bool restart); void frontend_driver_process_args(int *argc, char *argv[]); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index bd11c53d75..166ae63877 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -758,17 +758,16 @@ static int generic_action_ok(const char *path, flush_char = NULL; flush_type = MENU_SETTINGS; runloop_ctl(RUNLOOP_CTL_SET_LIBRETRO_PATH, action_path); - event_cmd_ctl(EVENT_CMD_LOAD_CORE, NULL); - -#if !defined(HAVE_DYNAMIC) - /* Core selection on non-console just updates directory listing. - * Will take effect on new content load. */ - ret = -1; - event_cmd_ctl(EVENT_CMD_RESTART_RETROARCH, NULL); + if (event_cmd_ctl(EVENT_CMD_LOAD_CORE, NULL)) + { +#ifndef HAVE_DYNAMIC + /* Core selection on non-console just updates directory listing. + * Will take effect on new content load. */ + if (event_cmd_ctl(EVENT_CMD_RESTART_RETROARCH, NULL)) + ret = -1; #endif - + } break; - case ACTION_OK_LOAD_CONFIG_FILE: { bool msg_force = true;