diff --git a/menu/menu.c b/menu/menu.c index 328f549fc5..e7b7f99ed8 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -222,6 +222,10 @@ void menu_free(menu_handle_t *menu) return; menu_free_list(menu); + + if (menu->playlist) + content_playlist_free(menu->playlist); + menu->playlist = NULL; #ifdef HAVE_SHADER_MANAGER if (menu->shader) diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 247fcf752c..24ce25713c 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -220,6 +220,7 @@ typedef struct animation_t *animation; bool animation_is_active; + content_playlist_t *playlist; char db_playlist_file[PATH_MAX_LENGTH]; } menu_handle_t; diff --git a/menu/menu_entries_cbs_ok.c b/menu/menu_entries_cbs_ok.c index f5ea17fb90..e82b91f8c1 100644 --- a/menu/menu_entries_cbs_ok.c +++ b/menu/menu_entries_cbs_ok.c @@ -43,7 +43,6 @@ static int menu_action_setting_set_current_string_path( static int action_ok_playlist_entry(const char *path, const char *label, unsigned type, size_t idx) { - bool free_list = false; size_t selection_ptr = 0; content_playlist_t *playlist = g_defaults.history; menu_handle_t *menu = menu_driver_get_ptr(); @@ -53,12 +52,10 @@ static int action_ok_playlist_entry(const char *path, if (!strcmp(label, "collection") || !strcmp(label, "rdb_entry_start_game")) { - free_list = true; - - playlist = content_playlist_init(menu->db_playlist_file, 1000); - - if (!playlist) + if (!menu->playlist) return -1; + + playlist = menu->playlist; } selection_ptr = menu->navigation.selection_ptr; @@ -68,9 +65,6 @@ static int action_ok_playlist_entry(const char *path, rarch_playlist_load_content(playlist, selection_ptr); - if (free_list) - content_playlist_free(playlist); - menu_list_flush_stack(menu->menu_list, NULL, MENU_SETTINGS); return -1; }