From fc6d22d47bb9f388b63ffcc51620392c616d5cec Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Sat, 13 Feb 2016 06:11:17 +0100
Subject: [PATCH] Create CHEEVOS_CTL_UNLOAD

---
 cheevos.c       | 21 ++++++++++-----------
 cheevos.h       |  5 ++---
 command_event.c |  2 +-
 3 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/cheevos.c b/cheevos.c
index 46332b3aee..9c46300815 100644
--- a/cheevos.c
+++ b/cheevos.c
@@ -964,7 +964,7 @@ static int cheevos_parse(const char *json)
 
    if (jsonsax_parse(json, &handlers, (void*)&ud) != JSONSAX_OK)
    {
-      cheevos_unload();
+      cheevos_ctl(CHEEVOS_CTL_UNLOAD, NULL);
       return -1;
    }
    
@@ -1446,16 +1446,6 @@ static void cheevos_free_cheevo_set(const cheevoset_t *set)
    free((void*)set->cheevos);
 }
 
-void cheevos_unload(void)
-{
-   if (cheevos_locals.loaded)
-   {
-      cheevos_free_cheevo_set(&cheevos_locals.core);
-      cheevos_free_cheevo_set(&cheevos_locals.unofficial);
-      
-      cheevos_locals.loaded = 0;
-   }
-}
 
 /*****************************************************************************
 Load achievements from retroachievements.org.
@@ -2200,6 +2190,15 @@ bool cheevos_ctl(enum cheevos_ctl_state state, void *data)
          if (!cheevos_load((const void*)data))
             return false;
          break;
+      case CHEEVOS_CTL_UNLOAD:
+         if (!cheevos_locals.loaded)
+            return false;
+
+         cheevos_free_cheevo_set(&cheevos_locals.core);
+         cheevos_free_cheevo_set(&cheevos_locals.unofficial);
+
+         cheevos_locals.loaded = 0;
+         break;
       case CHEEVOS_CTL_TEST:
          if (!cheevos_locals.loaded)
             return false;
diff --git a/cheevos.h b/cheevos.h
index 864a2471e4..ade6fbbf75 100644
--- a/cheevos.h
+++ b/cheevos.h
@@ -23,7 +23,8 @@ enum cheevos_ctl_state
 {
    CHEEVOS_CTL_NONE = 0,
    CHEEVOS_CTL_TEST,
-   CHEEVOS_CTL_LOAD
+   CHEEVOS_CTL_LOAD,
+   CHEEVOS_CTL_UNLOAD
 };
 
 #ifdef HAVE_MENU
@@ -36,8 +37,6 @@ void cheevos_set_cheats(void);
 
 void cheevos_apply_cheats(bool enable);
 
-void cheevos_unload(void);
-
 bool cheevos_ctl(enum cheevos_ctl_state state, void *data);
 
 #endif /* __RARCH_CHEEVOS_H */
diff --git a/command_event.c b/command_event.c
index cba521383f..916e294970 100644
--- a/command_event.c
+++ b/command_event.c
@@ -396,7 +396,7 @@ static void event_deinit_core(bool reinit)
 {
 #ifdef HAVE_CHEEVOS
    /* Unload the achievements from memory. */
-   cheevos_unload();
+   cheevos_ctl(CHEEVOS_CTL_UNLOAD, NULL);
 #endif
 
    core_ctl(CORE_CTL_RETRO_UNLOAD_GAME, NULL);