From de7384f549be98181815344a61e223bc48cc4f8d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 3 Oct 2005 12:46:15 +0000 Subject: [PATCH] fix mem issue SVN revision: 17130 --- .../src/lib/engines/xrender_x11/evas_engine.c | 36 ++++++++++++++----- .../engines/xrender_x11/evas_engine_image.c | 9 +++-- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/legacy/evas/src/lib/engines/xrender_x11/evas_engine.c b/legacy/evas/src/lib/engines/xrender_x11/evas_engine.c index 1051ec5b06..0bad71c808 100644 --- a/legacy/evas/src/lib/engines/xrender_x11/evas_engine.c +++ b/legacy/evas/src/lib/engines/xrender_x11/evas_engine.c @@ -681,21 +681,26 @@ evas_engine_xrender_x11_image_size_set(void *data, void *image, int w, int h) re = (Render_Engine *)data; if (!image) return image; + if ((w <= 0) || (h <= 0)) + { + _xre_image_free((XR_Image *)image); + return NULL; + } if (((XR_Image *)image)->references > 1) { XR_Image *old_image; old_image = (XR_Image *)image; image = _xre_image_copy((XR_Image *)old_image); - _xre_image_free(old_image); + if (image) + { + _xre_image_free(old_image); + } + else + image = old_image; } else _xre_image_dirty((XR_Image *)image); - if ((w <= 0) || (h <= 0)) - { - _xre_image_free((XR_Image *)image); - return NULL; - } _xre_image_resize((XR_Image *)image, w, h); return image; } @@ -713,7 +718,12 @@ evas_engine_xrender_x11_image_dirty_region(void *data, void *image, int x, int y old_image = (XR_Image *)image; image = _xre_image_copy((XR_Image *)old_image); - _xre_image_free(old_image); + if (image) + { + _xre_image_free(old_image); + } + else + image = old_image; } else _xre_image_dirty((XR_Image *)image); @@ -737,7 +747,9 @@ evas_engine_xrender_x11_image_data_get(void *data, void *image, int to_write, DA old_image = (XR_Image *)image; image = _xre_image_copy((XR_Image *)old_image); if (image) - _xre_image_free(old_image); + { + _xre_image_free(old_image); + } else image = old_image; } @@ -786,7 +798,13 @@ evas_engine_xrender_x11_image_alpha_set(void *data, void *image, int has_alpha) old_image = (XR_Image *)image; image = _xre_image_copy((XR_Image *)old_image); - _xre_image_free(old_image); + if (image) + { + ((XR_Image *)image)->alpha = old_image->alpha; + _xre_image_free(old_image); + } + else + image = old_image; } else _xre_image_dirty((XR_Image *)image); diff --git a/legacy/evas/src/lib/engines/xrender_x11/evas_engine_image.c b/legacy/evas/src/lib/engines/xrender_x11/evas_engine_image.c index 3b0a2e6085..77bb31c0c5 100644 --- a/legacy/evas/src/lib/engines/xrender_x11/evas_engine_image.c +++ b/legacy/evas/src/lib/engines/xrender_x11/evas_engine_image.c @@ -48,7 +48,10 @@ _xre_image_load(Ximage_Info *xinf, char *file, char *key) else snprintf(buf, sizeof(buf), "/@%p@%x@/%s", xinf->disp, xinf->root, file); im = __xre_image_find(buf); - if (im) return im; + if (im) + { + return im; + } im = calloc(1, sizeof(XR_Image)); if (!im) return NULL; @@ -179,7 +182,9 @@ _xre_image_free(XR_Image *im) _xre_image_cache_set(_xr_image_cache_size); } else - __xre_image_real_free(im); + { + __xre_image_real_free(im); + } } void