ecore: Fix legacy message handlers destruction
authorJean-Philippe Andre <jp.andre@samsung.com>
Fri, 15 Dec 2017 10:08:59 +0000 (19:08 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Wed, 10 Jan 2018 11:08:13 +0000 (20:08 +0900)
src/lib/ecore/ecore_event_message_handler.c

index 3879c3c..9a6e03e 100644 (file)
@@ -171,6 +171,12 @@ _ecore_event_message_handler_handler_del(Eo *obj EINA_UNUSED, Ecore_Event_Messag
    data = h->data;
    if (pd->handlers_walking > 0)
      {
+        if (h->to_add)
+          {
+             h->to_add = EINA_FALSE;
+             pd->handlers_add = eina_list_remove(pd->handlers_add, h);
+          }
+
         h->delete_me = EINA_TRUE;
         pd->handlers_delete = eina_list_append(pd->handlers_delete, h);
      }
@@ -284,9 +290,14 @@ _ecore_event_message_handler_efl_object_destructor(Eo *obj, Ecore_Event_Message_
           {
              free(h);
           }
-        for (i = 0; i < pd->event_type_count; i++)
+        for (i = 0; i <= pd->event_type_count; i++)
           {
-             EINA_INLIST_FREE(pd->handlers[i], h) free(h);
+             EINA_INLIST_FREE(pd->handlers[i], h)
+               {
+                  pd->handlers[i] = eina_inlist_remove(pd->handlers[i],
+                                                       EINA_INLIST_GET(h));
+                  free(h);
+               }
           }
         free(pd->handlers);
         pd->handlers = NULL;