(overlay) Fix memory leak

This commit is contained in:
Higor Eurípedes 2015-11-23 17:02:36 -03:00
parent 9654fabe77
commit 6f88ece9ab

View File

@ -199,10 +199,9 @@ static void input_overlay_free_overlay(struct overlay *overlay)
texture_image_free(&overlay->image); texture_image_free(&overlay->image);
} }
static void input_overlay_free_overlays(void) static void input_overlay_free_overlays(input_overlay_t *ol)
{ {
size_t i; size_t i;
input_overlay_t *ol = overlay_ptr;
if (!ol) if (!ol)
return; return;
@ -534,14 +533,14 @@ void input_overlay_free(void)
input_overlay_t *ol = overlay_ptr; input_overlay_t *ol = overlay_ptr;
if (!ol) if (!ol)
return; return;
overlay_ptr = NULL;
input_overlay_free_overlays(); input_overlay_free_overlays(ol);
if (ol->iface && ol->iface->enable) if (ol->iface && ol->iface->enable)
ol->iface->enable(ol->iface_data, false); ol->iface->enable(ol->iface_data, false);
free(ol); free(ol);
overlay_ptr = NULL;
} }
/* task_data = overlay_task_data_t* */ /* task_data = overlay_task_data_t* */
@ -549,9 +548,10 @@ static void input_overlay_loaded(void *task_data, void *user_data, const char *e
{ {
overlay_task_data_t *data = (overlay_task_data_t*)task_data; overlay_task_data_t *data = (overlay_task_data_t*)task_data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
input_overlay_t *ol = (input_overlay_t*)calloc(1, sizeof(*ol)); input_overlay_t *ol;
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
ol = (input_overlay_t*)calloc(1, sizeof(*ol));
ol->overlays = data->overlays; ol->overlays = data->overlays;
ol->size = data->size; ol->size = data->size;
ol->active = data->active; ol->active = data->active;
@ -570,11 +570,7 @@ static void input_overlay_loaded(void *task_data, void *user_data, const char *e
overlay_ptr = ol; overlay_ptr = ol;
input_overlay_load_active(settings->input.overlay_opacity); input_overlay_load_active(settings->input.overlay_opacity);
input_overlay_enable(driver->osk_enable ? settings->osk.enable : settings->input.overlay_enable);
input_overlay_enable(driver->osk_enable ?
settings->osk.enable : settings->input.overlay_enable);
input_overlay_set_alpha_mod(settings->input.overlay_opacity);
input_overlay_set_scale_factor(settings->input.overlay_scale); input_overlay_set_scale_factor(settings->input.overlay_scale);
ol->next_index = (ol->index + 1) % ol->size; ol->next_index = (ol->index + 1) % ol->size;
@ -590,6 +586,7 @@ error:
void input_overlay_init(void) void input_overlay_init(void)
{ {
input_overlay_free();
rarch_task_push_overlay_load_default(input_overlay_loaded, NULL); rarch_task_push_overlay_load_default(input_overlay_loaded, NULL);
} }