raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b132ce65ec755e282291f4fa8da46eafcc2af942

commit b132ce65ec755e282291f4fa8da46eafcc2af942
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Fri Apr 1 17:37:37 2016 +0900

    evas - fix leak because cutouts_fre .. doesnt free - it just resets to 0
    
    this works with 7166e6b85994b19a29f05c9e2b6d75a314a3cb91 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 7166e6b85994b19a29f05c9e2b6d75a314a3cb91)
---
 src/lib/evas/common/evas_draw.h           |  1 +
 src/lib/evas/common/evas_draw_main.c      |  8 ++++++++
 src/lib/evas/common/evas_font_draw.c      |  5 +++--
 src/lib/evas/common/evas_map_image.c      | 10 ++++++----
 src/lib/evas/common/evas_rectangle_main.c |  5 +++--
 src/lib/evas/common/evas_scale_main.c     |  5 +++--
 6 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/src/lib/evas/common/evas_draw.h b/src/lib/evas/common/evas_draw.h
index 0beb84c..0623ea4 100644
--- a/src/lib/evas/common/evas_draw.h
+++ b/src/lib/evas/common/evas_draw.h
@@ -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);
diff --git a/src/lib/evas/common/evas_draw_main.c 
b/src/lib/evas/common/evas_draw_main.c
index 460a296..289d6df 100644
--- a/src/lib/evas/common/evas_draw_main.c
+++ b/src/lib/evas/common/evas_draw_main.c
@@ -36,6 +36,14 @@ evas_common_draw_context_cutouts_free(Cutout_Rects* rects)
 }
 
 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)
 {
    if ((idx >= 0) && (idx < rects->active))
diff --git a/src/lib/evas/common/evas_font_draw.c 
b/src/lib/evas/common/evas_font_draw.c
index c61e921..79c8900 100644
--- a/src/lib/evas/common/evas_font_draw.c
+++ b/src/lib/evas/common/evas_font_draw.c
@@ -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;
diff --git a/src/lib/evas/common/evas_map_image.c 
b/src/lib/evas/common/evas_map_image.c
index f5b1a32..252bd3b 100644
--- a/src/lib/evas/common/evas_map_image.c
+++ b/src/lib/evas/common/evas_map_image.c
@@ -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;
diff --git a/src/lib/evas/common/evas_rectangle_main.c 
b/src/lib/evas/common/evas_rectangle_main.c
index 388fba6..ed78cca 100644
--- a/src/lib/evas/common/evas_rectangle_main.c
+++ b/src/lib/evas/common/evas_rectangle_main.c
@@ -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
           }
      }
diff --git a/src/lib/evas/common/evas_scale_main.c 
b/src/lib/evas/common/evas_scale_main.c
index 6c8a262..a09f0c6 100644
--- a/src/lib/evas/common/evas_scale_main.c
+++ b/src/lib/evas/common/evas_scale_main.c
@@ -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;

-- 


Reply via email to