diff --git a/command.c b/command.c index d7c99c8eb9..57762309db 100644 --- a/command.c +++ b/command.c @@ -1775,7 +1775,7 @@ bool command_event(enum event_command cmd, void *data) return false; break; case CMD_EVENT_UNLOAD_CORE: - runloop_ctl(RUNLOOP_CTL_PREPARE_DUMMY, NULL); + runloop_prepare_dummy(); command_event(CMD_EVENT_LOAD_CORE_DEINIT, NULL); break; case CMD_EVENT_QUIT: diff --git a/retroarch.c b/retroarch.c index 59e862602c..f4c5fb3ba5 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1539,7 +1539,7 @@ bool retroarch_replace_config(char *path) *settings->path.libretro = '\0'; /* Load core in new config. */ - runloop_ctl(RUNLOOP_CTL_PREPARE_DUMMY, NULL); + runloop_prepare_dummy(); return true; } diff --git a/runloop.c b/runloop.c index 92a85b4d81..ce0f8f18a4 100644 --- a/runloop.c +++ b/runloop.c @@ -720,6 +720,26 @@ static bool runloop_is_frame_count_end(void) } +bool runloop_prepare_dummy(void) +{ + memset(&runloop_frame_time, 0, sizeof(struct retro_frame_time_callback)); +#ifdef HAVE_MENU + menu_driver_ctl(RARCH_MENU_CTL_UNSET_LOAD_NO_CONTENT, NULL); +#endif + runloop_ctl(RUNLOOP_CTL_DATA_DEINIT, NULL); + runloop_ctl(RUNLOOP_CTL_TASK_INIT, NULL); + runloop_ctl(RUNLOOP_CTL_CLEAR_CONTENT_PATH, NULL); + +#ifdef HAVE_MENU + if (!menu_content_ctl(MENU_CONTENT_CTL_LOAD, NULL)) + { + rarch_ctl(RARCH_CTL_MENU_RUNNING, NULL); + return false; + } +#endif + return true; +} + bool runloop_ctl(enum runloop_ctl_state state, void *data) { settings_t *settings = config_get_ptr(); @@ -1056,23 +1076,6 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) task_queue_ctl(TASK_QUEUE_CTL_INIT, &threaded_enable); } break; - case RUNLOOP_CTL_PREPARE_DUMMY: - memset(&runloop_frame_time, 0, sizeof(struct retro_frame_time_callback)); -#ifdef HAVE_MENU - menu_driver_ctl(RARCH_MENU_CTL_UNSET_LOAD_NO_CONTENT, NULL); -#endif - runloop_ctl(RUNLOOP_CTL_DATA_DEINIT, NULL); - runloop_ctl(RUNLOOP_CTL_TASK_INIT, NULL); - runloop_ctl(RUNLOOP_CTL_CLEAR_CONTENT_PATH, NULL); - -#ifdef HAVE_MENU - if (!menu_content_ctl(MENU_CONTENT_CTL_LOAD, NULL)) - { - rarch_ctl(RARCH_CTL_MENU_RUNNING, NULL); - return false; - } -#endif - break; case RUNLOOP_CTL_SET_CORE_SHUTDOWN: runloop_core_shutdown_initiated = true; break; @@ -1262,7 +1265,7 @@ static void runloop_iterate_linefeed_overlay(settings_t *settings) * Aborts core shutdown if invoked. */ static int runloop_iterate_time_to_exit_load_dummy(void) { - if (!runloop_ctl(RUNLOOP_CTL_PREPARE_DUMMY, NULL)) + if (!runloop_prepare_dummy()) return -1; runloop_ctl(RUNLOOP_CTL_UNSET_SHUTDOWN, NULL); diff --git a/runloop.h b/runloop.h index ce7cc6f03d..3c7f5ad9b6 100644 --- a/runloop.h +++ b/runloop.h @@ -102,8 +102,7 @@ enum runloop_ctl_state RUNLOOP_CTL_SHADER_DIR_INIT, RUNLOOP_CTL_SYSTEM_INFO_GET, RUNLOOP_CTL_SYSTEM_INFO_INIT, - RUNLOOP_CTL_SYSTEM_INFO_FREE, - RUNLOOP_CTL_PREPARE_DUMMY + RUNLOOP_CTL_SYSTEM_INFO_FREE }; typedef int (*transfer_cb_t)(void *data, size_t len); @@ -295,6 +294,8 @@ void runloop_msg_queue_push(const char *msg, unsigned prio, char* runloop_msg_queue_pull(void); +bool runloop_prepare_dummy(void); + bool runloop_ctl(enum runloop_ctl_state state, void *data);