diff --git a/runloop_data.c b/runloop_data.c
index 5487d13000..5999cc07ec 100644
--- a/runloop_data.c
+++ b/runloop_data.c
@@ -101,10 +101,20 @@ void rarch_main_data_deinit(void)
    runloop->inited = false;
 }
 
-void rarch_main_data_free(void)
+static void rarch_main_data_free_internal(void)
 {
    data_runloop_t *runloop = rarch_main_data_get_ptr();
 
+   if (!runloop)
+      return;
+
+   if (runloop)
+      free(runloop);
+   runloop = NULL;
+}
+
+void rarch_main_data_free(void)
+{
    rarch_main_data_nbio_uninit();
 #ifdef HAVE_NETWORKING
    rarch_main_data_http_uninit();
@@ -113,9 +123,7 @@ void rarch_main_data_free(void)
    rarch_main_data_db_uninit();
 #endif
 
-   if (runloop)
-      free(runloop);
-   runloop = NULL;
+   rarch_main_data_free_internal();
 }
 
 static void data_runloop_iterate(bool is_thread)