fixed a memleak

SVN revision: 8804
This commit is contained in:
tsauerbeck 2004-02-04 19:41:27 +00:00 committed by tsauerbeck
parent 9d7fe9552c
commit 06de4c4ca5
1 changed files with 24 additions and 7 deletions

View File

@ -600,11 +600,25 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force)
_edje_unblock(ed);
}
static void _edje_emission_free(Edje_Emission *ee)
{
if (!ee)
return;
if (ee->signal)
free(ee->signal);
if (ee->source)
free(ee->source);
free(ee);
}
void
_edje_emit(Edje *ed, char *sig, char *src)
{
Evas_List *l;
Edje_Emission *ee;
Edje_Emission *ee = NULL;
/* limit self-feeding loops in callbacks to 64 levels */
static int recursions = 0;
static int recursion_limit = 0;
@ -614,10 +628,9 @@ _edje_emit(Edje *ed, char *sig, char *src)
while (ed->emissions)
{
ee = ed->emissions->data;
free(ee->signal);
free(ee->source);
free(ee);
ed->emissions = evas_list_remove(ed->emissions, ee);
_edje_emission_free(ee);
}
return;
}
@ -754,11 +767,15 @@ _edje_emit(Edje *ed, char *sig, char *src)
if (tmps) free(tmps);
tmps = NULL;
}
free(ee->signal);
free(ee->source);
free(ee);
_edje_emission_free(ee);
ee = NULL;
}
break_prog:
if (ee)
_edje_emission_free(ee);
recursions--;
if (recursions == 0) recursion_limit = 0;
_edje_thaw(ed);