evas - fix leak because cutouts_fre .. doesnt free - it just resets to 0

this works with 7166e6b859 and fixes a
leak added because ... free does not free!
evas_common_draw_context_cutouts_real_free(0 now actually frees the
rects, but evas_common_draw_context_cutouts_free() before did not.

@fix (follow on from 7166e6b859)
This commit is contained in:
Carsten Haitzler 2016-04-01 17:37:37 +09:00
parent e438bd09b2
commit b132ce65ec
6 changed files with 24 additions and 10 deletions

View File

@ -23,6 +23,7 @@ EAPI void evas_common_draw_context_set_multiplier (RGBA_D
EAPI void evas_common_draw_context_unset_multiplier (RGBA_Draw_Context *dc);
EAPI Cutout_Rects *evas_common_draw_context_cutouts_new (void);
EAPI void evas_common_draw_context_cutouts_free (Cutout_Rects* rects);
EAPI void evas_common_draw_context_cutouts_real_free (Cutout_Rects* rects);
EAPI void evas_common_draw_context_cutouts_del (Cutout_Rects* rects, int idx);
EAPI void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
EAPI void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);

View File

@ -35,6 +35,14 @@ evas_common_draw_context_cutouts_free(Cutout_Rects* rects)
rects->last_add.w = 0;
}
EAPI void
evas_common_draw_context_cutouts_real_free(Cutout_Rects* rects)
{
if (!rects) return;
free(rects->rects);
free(rects);
}
EAPI void
evas_common_draw_context_cutouts_del(Cutout_Rects* rects, int idx)
{

View File

@ -421,11 +421,12 @@ evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, E
rects_used++;
if (rects_used >= 4096)
{
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
rects = NULL;
rects_used = 0;
}
#else
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
#endif
}
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;

View File

@ -793,11 +793,12 @@ evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst,
rects_used++;
if (rects_used >= 4096)
{
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
rects = NULL;
rects_used = 0;
}
#else
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
#endif
/* restore clip info */
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;
@ -857,11 +858,12 @@ evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Conte
rects_used++;
if (rects_used >= 4096)
{
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
rects = NULL;
rects_used = 0;
}
#else
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
#endif
/* restore clip info */
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;

View File

@ -51,11 +51,12 @@ evas_common_rectangle_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int
rects_used++;
if (rects_used >= 4096)
{
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
rects = NULL;
rects_used = 0;
}
#else
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
#endif
}
}

View File

@ -89,11 +89,12 @@ evas_common_scale_rgba_in_to_out_clip_cb(RGBA_Image *src, RGBA_Image *dst,
rects_used++;
if (rects_used >= 4096)
{
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
rects = NULL;
rects_used = 0;
}
#else
evas_common_draw_context_cutouts_free(rects);
evas_common_draw_context_cutouts_real_free(rects);
#endif
/* restore clip info */
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;