mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
Cleanups - call menu_free from menu_init in case of an error
This commit is contained in:
parent
e8a290bd7b
commit
8a42deb189
115
menu/menu.c
115
menu/menu.c
@ -180,6 +180,57 @@ void menu_common_load_content(bool persist, enum rarch_core_type type)
|
|||||||
menu_common_push_content_settings();
|
menu_common_push_content_settings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* menu_free:
|
||||||
|
* @menu : Menu handle.
|
||||||
|
*
|
||||||
|
* Frees a menu handle
|
||||||
|
**/
|
||||||
|
void menu_free(menu_handle_t *menu)
|
||||||
|
{
|
||||||
|
global_t *global = global_get_ptr();
|
||||||
|
menu_display_t *disp = menu_display_get_ptr();
|
||||||
|
menu_entries_t *entries = menu ? &menu->entries : NULL;
|
||||||
|
if (!menu || !disp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (menu->playlist)
|
||||||
|
content_playlist_free(menu->playlist);
|
||||||
|
menu->playlist = NULL;
|
||||||
|
|
||||||
|
menu_shader_free(menu);
|
||||||
|
|
||||||
|
menu_driver_free(menu);
|
||||||
|
|
||||||
|
#ifdef HAVE_DYNAMIC
|
||||||
|
libretro_free_system_info(&global->menu.info);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
menu_display_free(menu);
|
||||||
|
|
||||||
|
if (entries)
|
||||||
|
{
|
||||||
|
menu_setting_free(entries->list_settings);
|
||||||
|
entries->list_settings = NULL;
|
||||||
|
|
||||||
|
menu_list_free(entries->menu_list);
|
||||||
|
entries->menu_list = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
event_command(EVENT_CMD_HISTORY_DEINIT);
|
||||||
|
|
||||||
|
if (global->core_info.list)
|
||||||
|
core_info_list_free(global->core_info.list);
|
||||||
|
|
||||||
|
if (global->core_info.current)
|
||||||
|
free(global->core_info.current);
|
||||||
|
global->core_info.current = NULL;
|
||||||
|
|
||||||
|
menu_driver_unset_alive();
|
||||||
|
|
||||||
|
free(menu);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* menu_init:
|
* menu_init:
|
||||||
* @data : Menu context handle.
|
* @data : Menu context handle.
|
||||||
@ -249,68 +300,10 @@ void *menu_init(const void *data)
|
|||||||
menu_driver_set_alive();
|
menu_driver_set_alive();
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (menu->entries.menu_list)
|
menu_free(menu);
|
||||||
menu_list_free(menu->entries.menu_list);
|
|
||||||
menu->entries.menu_list = NULL;
|
|
||||||
if (global->core_info.current)
|
|
||||||
free(global->core_info.current);
|
|
||||||
global->core_info.current = NULL;
|
|
||||||
if (menu->shader)
|
|
||||||
free(menu->shader);
|
|
||||||
menu->shader = NULL;
|
|
||||||
if (menu)
|
|
||||||
free(menu);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* menu_free:
|
|
||||||
* @menu : Menu handle.
|
|
||||||
*
|
|
||||||
* Frees a menu handle
|
|
||||||
**/
|
|
||||||
void menu_free(menu_handle_t *menu)
|
|
||||||
{
|
|
||||||
global_t *global = global_get_ptr();
|
|
||||||
menu_display_t *disp = menu_display_get_ptr();
|
|
||||||
menu_entries_t *entries = menu ? &menu->entries : NULL;
|
|
||||||
if (!menu || !disp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (menu->playlist)
|
|
||||||
content_playlist_free(menu->playlist);
|
|
||||||
menu->playlist = NULL;
|
|
||||||
|
|
||||||
menu_shader_free(menu);
|
|
||||||
|
|
||||||
menu_driver_free(menu);
|
|
||||||
|
|
||||||
#ifdef HAVE_DYNAMIC
|
|
||||||
libretro_free_system_info(&global->menu.info);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
menu_display_free(menu);
|
|
||||||
|
|
||||||
if (entries)
|
|
||||||
{
|
|
||||||
menu_setting_free(entries->list_settings);
|
|
||||||
entries->list_settings = NULL;
|
|
||||||
|
|
||||||
menu_list_free(entries->menu_list);
|
|
||||||
entries->menu_list = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
event_command(EVENT_CMD_HISTORY_DEINIT);
|
|
||||||
|
|
||||||
if (global->core_info.list)
|
|
||||||
core_info_list_free(global->core_info.list);
|
|
||||||
|
|
||||||
if (global->core_info.current)
|
|
||||||
free(global->core_info.current);
|
|
||||||
global->core_info.current = NULL;
|
|
||||||
|
|
||||||
menu_driver_unset_alive();
|
|
||||||
|
|
||||||
free(menu);
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user