diff --git a/general.h b/general.h index 650bab40e2..c856e7d5ab 100644 --- a/general.h +++ b/general.h @@ -151,6 +151,8 @@ enum basic_event RARCH_CMD_BSV_MOVIE_DEINIT, RARCH_CMD_COMMAND_INIT, RARCH_CMD_COMMAND_DEINIT, + RARCH_CMD_DRIVERS_DEINIT, + RARCH_CMD_DRIVERS_INIT, }; enum action_state diff --git a/retroarch.c b/retroarch.c index d2ae9b5989..2a9552475e 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2353,12 +2353,12 @@ static void main_clear_state(bool inited) memset(&g_settings, 0, sizeof(g_settings)); if (inited) - uninit_drivers(); + rarch_main_command(RARCH_CMD_DRIVERS_DEINIT); main_clear_state_extern(); if (inited) - init_drivers(); + rarch_main_command(RARCH_CMD_DRIVERS_INIT); init_state(); @@ -2460,7 +2460,9 @@ static void deinit_core(void) { pretro_unload_game(); pretro_deinit(); - uninit_drivers(); + + rarch_main_command(RARCH_CMD_DRIVERS_DEINIT); + uninit_libretro_sym(); } @@ -2528,8 +2530,8 @@ int rarch_main_init(int argc, char *argv[]) retro_init_libretro_cbs(&driver.retro_ctx); init_system_av_info(); - init_drivers(); + rarch_main_command(RARCH_CMD_DRIVERS_INIT); rarch_main_command(RARCH_CMD_COMMAND_INIT); rarch_main_command(RARCH_CMD_REWIND_INIT); rarch_main_command(RARCH_CMD_CONTROLLERS_INIT); @@ -3035,10 +3037,16 @@ void rarch_main_command(unsigned cmd) g_settings.input.overlay_opacity); #endif break; - case RARCH_CMD_RESET_CONTEXT: + case RARCH_CMD_DRIVERS_DEINIT: uninit_drivers(); + break; + case RARCH_CMD_DRIVERS_INIT: init_drivers(); break; + case RARCH_CMD_RESET_CONTEXT: + rarch_main_command(RARCH_CMD_DRIVERS_DEINIT); + rarch_main_command(RARCH_CMD_DRIVERS_INIT); + break; case RARCH_CMD_QUIT_RETROARCH: rarch_main_set_state(RARCH_ACTION_STATE_FORCE_QUIT); break;