diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2019-06-21 09:29:52 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2019-06-21 09:29:52 +0100 |
commit | 1c02b7740de0938bcbad2e26ee055ad570cdf77c (patch) | |
tree | f05f3ba45ea721cbe3653cce11f1149e43dbdc9c | |
parent | 48215560abc3a2c3eded6c2d0912240a7d29f22a (diff) | |
download | efl-1c02b7740de0938bcbad2e26ee055ad570cdf77c.tar.gz |
fix segv when adding optimizations to edje message handling
613e1715be1114c2221f1a12f067e3d1e215265f (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.
-rw-r--r-- | src/lib/edje/edje_message_queue.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/lib/edje/edje_message_queue.c b/src/lib/edje/edje_message_queue.c index 2e7e7ad9ba..ea3adc824a 100644 --- a/src/lib/edje/edje_message_queue.c +++ b/src/lib/edje/edje_message_queue.c @@ -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++; |