From 8ab15e7ef8d37ffec1b4c451034c2ccb23ed692d Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Mon, 7 Dec 2015 15:03:54 +0100
Subject: [PATCH] Create RARCH_CTL_DESTROY

---
 frontend/frontend.c |  2 +-
 retroarch.c         | 26 ++++++++++++++------------
 retroarch.h         |  4 ++--
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/frontend/frontend.c b/frontend/frontend.c
index 89b710b650..41e6877318 100644
--- a/frontend/frontend.c
+++ b/frontend/frontend.c
@@ -83,7 +83,7 @@ void main_exit(void *args)
    frontend_driver_exitspawn(settings->libretro,
          sizeof(settings->libretro));
 
-   rarch_main_free();
+   rarch_ctl(RARCH_CTL_DESTROY, NULL);
 
    ui_companion_driver_deinit();
 
diff --git a/retroarch.c b/retroarch.c
index 01cbfbf195..fc4080a8dc 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -1067,18 +1067,6 @@ static bool init_state(void)
    return true;
 }
 
-void rarch_main_free(void)
-{
-   runloop_ctl(RUNLOOP_CTL_MSG_QUEUE_DEINIT, NULL);
-   event_command(EVENT_CMD_DRIVERS_DEINIT);
-   event_command(EVENT_CMD_LOG_FILE_DEINIT);
-
-   runloop_ctl(RUNLOOP_CTL_STATE_FREE,  NULL);
-   runloop_ctl(RUNLOOP_CTL_GLOBAL_FREE, NULL);
-   runloop_ctl(RUNLOOP_CTL_DATA_DEINIT, NULL);
-   config_free();
-}
-
 /**
  * rarch_init_system_av_info:
  *
@@ -1292,6 +1280,20 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data)
 
    switch(state)
    {
+      case RARCH_CTL_DESTROY:
+         rarch_error_on_init     = false;
+         rarch_block_config_read = false;
+         rarch_force_fullscreen  = false;
+
+         runloop_ctl(RUNLOOP_CTL_MSG_QUEUE_DEINIT, NULL);
+         event_command(EVENT_CMD_DRIVERS_DEINIT);
+         event_command(EVENT_CMD_LOG_FILE_DEINIT);
+
+         runloop_ctl(RUNLOOP_CTL_STATE_FREE,  NULL);
+         runloop_ctl(RUNLOOP_CTL_GLOBAL_FREE, NULL);
+         runloop_ctl(RUNLOOP_CTL_DATA_DEINIT, NULL);
+         config_free();
+         return true;
       case RARCH_CTL_DEINIT:
          {
             bool inited      = false;
diff --git a/retroarch.h b/retroarch.h
index edc44d6cb6..56b55074b7 100644
--- a/retroarch.h
+++ b/retroarch.h
@@ -63,6 +63,8 @@ enum rarch_ctl_state
 
    RARCH_CTL_PREINIT,
 
+   RARCH_CTL_DESTROY,
+
    RARCH_CTL_LOAD_CONTENT,
 
 #ifdef HAVE_FFMPEG
@@ -150,8 +152,6 @@ struct rarch_main_wrap
    bool touched;
 };
 
-void rarch_main_free(void);
-
 bool rarch_ctl(enum rarch_ctl_state state, void *data);
 
 /**