* ecore: Fix a segv during ecore_shutdown.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 17 Jun 2009 12:38:15 +0000 (12:38 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 17 Jun 2009 12:38:15 +0000 (12:38 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@41075 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore/ecore_events.c

index 8b32ca4..fd69557 100644 (file)
@@ -298,15 +298,15 @@ _ecore_event_shutdown(void)
    while (events) _ecore_event_del(events);
    for (i = 0; i < event_handlers_num; i++)
      {
-       while (event_handlers[i])
+       while ((eh = event_handlers[i]))
          {
             event_handlers[i] = (Ecore_Event_Handler *) eina_inlist_remove(EINA_INLIST_GET(event_handlers[i]), EINA_INLIST_GET(event_handlers[i]));
-            ECORE_MAGIC_SET(event_handlers[i], ECORE_MAGIC_NONE);
-            free(event_handlers[i]);
+            ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE);
+            if (!eh->delete_me) free(eh);
          }
      }
    EINA_LIST_FREE(event_handlers_delete_list, eh)
-       free(eh);
+     free(eh);
    if (event_handlers) free(event_handlers);
    event_handlers = NULL;
    event_handlers_num = 0;