forked from enlightenment/efl
fix segv when adding optimizations to edje message handling
613e1715be
(and friends) added a bit a
biug where messages in the queue were not skipped as they were before
causing a segv witha null lookup. this fixes that. eclipse about
dialog showed this bug up. no longer happens now.
This commit is contained in:
parent
48215560ab
commit
1c02b7740d
|
@ -180,7 +180,7 @@ static void
|
|||
_edje_object_message_signal_process_do(Eo *obj EINA_UNUSED, Edje *ed)
|
||||
{
|
||||
Eina_Inlist *l, *ln;
|
||||
Edje *lookup_ed;
|
||||
Edje *lookup_ed = NULL;
|
||||
Eina_List *groups = NULL, *lg;
|
||||
Edje_Message *em;
|
||||
int gotos = 0;
|
||||
|
@ -188,19 +188,21 @@ _edje_object_message_signal_process_do(Eo *obj EINA_UNUSED, Edje *ed)
|
|||
if (!ed) return;
|
||||
|
||||
groups = ed->groups;
|
||||
|
||||
for (l = msgq; l; l = ln)
|
||||
if (groups)
|
||||
{
|
||||
ln = l->next;
|
||||
em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
|
||||
EINA_LIST_FOREACH(groups, lg, lookup_ed)
|
||||
for (l = msgq; l; l = ln)
|
||||
{
|
||||
if (em->edje == lookup_ed)
|
||||
ln = l->next;
|
||||
em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
|
||||
EINA_LIST_FOREACH(groups, lg, lookup_ed)
|
||||
{
|
||||
msgq = eina_inlist_remove(msgq, &(em->inlist_main));
|
||||
tmp_msgq = eina_inlist_append(tmp_msgq, &(em->inlist_main));
|
||||
em->in_tmp_msgq = EINA_TRUE;
|
||||
break;
|
||||
if (em->edje == lookup_ed)
|
||||
{
|
||||
msgq = eina_inlist_remove(msgq, &(em->inlist_main));
|
||||
tmp_msgq = eina_inlist_append(tmp_msgq, &(em->inlist_main));
|
||||
em->in_tmp_msgq = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -213,12 +215,14 @@ again:
|
|||
em = INLIST_CONTAINER(Edje_Message, l, inlist_edje);
|
||||
if (!em->in_tmp_msgq) continue;
|
||||
// so why this? any group edje is not the parent - skip this
|
||||
lookup_ed = NULL;
|
||||
EINA_LIST_FOREACH(groups, lg, lookup_ed)
|
||||
{
|
||||
if (em->edje == lookup_ed) break;
|
||||
}
|
||||
if (!lookup_ed) continue;
|
||||
tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
|
||||
em->edje->messages = eina_inlist_remove(em->edje->messages, &(em->inlist_edje));
|
||||
lookup_ed->messages = eina_inlist_remove(lookup_ed->messages, &(em->inlist_edje));
|
||||
if (!lookup_ed->delete_me)
|
||||
{
|
||||
lookup_ed->processing_messages++;
|
||||
|
|
Loading…
Reference in New Issue