From 30b26c0937311a47eaa8a8a502d9bf60804f60f0 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Tue, 26 Feb 2008 18:41:44 +0000 Subject: [PATCH] Cleanup for possible memory leak. Patch by Cedric BAIL. SVN revision: 33853 --- legacy/edje/src/lib/edje_load.c | 9 +++++++++ legacy/edje/src/lib/edje_main.c | 1 + legacy/edje/src/lib/edje_private.h | 1 + legacy/edje/src/lib/edje_program.c | 3 +-- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index 6d94222892..bbe87673ea 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -608,6 +608,15 @@ _edje_file_del(Edje *ed) _edje_message_del(ed); _edje_block_violate(ed); _edje_var_shutdown(ed); + + if (ed->patterns.programs.signals_patterns) + { + edje_match_patterns_free(ed->patterns.programs.signals_patterns); + edje_match_patterns_free(ed->patterns.programs.sources_patterns); + } + ed->patterns.programs.signals_patterns = NULL; + ed->patterns.programs.sources_patterns = NULL; + if (!((ed->file) && (ed->collection))) return; if ((ed->file) && (ed->collection)) { diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index a3372443e1..e63bd1daf6 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -90,6 +90,7 @@ _edje_del(Edje *ed) return; } _edje_message_del(ed); + _edje_clean_callbacks_patterns(ed); _edje_file_del(ed); if (ed->path) evas_stringshare_del(ed->path); if (ed->part) evas_stringshare_del(ed->part); diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 15c3f3c29e..8520cdc93f 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -1028,6 +1028,7 @@ void _edje_program_end(Edje *ed, Edje_Running_Program *runp); void _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const char *ssrc); void _edje_emit(Edje *ed, const char *sig, const char *src); void _edje_emit_handle(Edje *ed, const char *sig, const char *src); +void _edje_clean_callbacks_patterns(Edje *ed); void _edje_text_init(void); void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep); diff --git a/legacy/edje/src/lib/edje_program.c b/legacy/edje/src/lib/edje_program.c index 8b813c55eb..c5ee811384 100644 --- a/legacy/edje/src/lib/edje_program.c +++ b/legacy/edje/src/lib/edje_program.c @@ -5,7 +5,6 @@ #include "edje_private.h" static void _edje_emit_cb(Edje *ed, const char *sig, const char *src); -static void _edje_clean_callbacks_patterns(Edje *ed); int _edje_anim_count = 0; Ecore_Animator *_edje_timer = NULL; @@ -1036,7 +1035,7 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src) _edje_unref(ed); } -static void +void _edje_clean_callbacks_patterns(Edje *ed) { if (ed->patterns.callbacks.signals_patterns)