raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=27ac9a2be294f1e4f7ab9a6483e51d8eaaa3f440

commit 27ac9a2be294f1e4f7ab9a6483e51d8eaaa3f440
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Dec 23 21:07:23 2017 +0900

    ecore main loop - fix fd handler clearning
    
    so loop object destruction was clearing out fd handlers but those may
    be later deleted by destructors of child objects. so leave legacy
    fdh's and just remove them from the list
---
 src/lib/ecore/ecore_main.c       | 41 ++++++++++++++++++++--------------------
 src/lib/ecore/efl_loop_handler.c | 28 ++++++++++++---------------
 2 files changed, 32 insertions(+), 37 deletions(-)

diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c
index 0084737221..00266b88f2 100644
--- a/src/lib/ecore/ecore_main.c
+++ b/src/lib/ecore/ecore_main.c
@@ -1040,11 +1040,13 @@ _ecore_main_loop_clear(Eo *obj, Efl_Loop_Data *pd)
           }
 #endif
      }
+# ifdef HAVE_EPOLL
    if (pd->epoll_fd >= 0)
      {
         close(pd->epoll_fd);
         pd->epoll_fd = -1;
      }
+#endif
    if (pd->timer_fd >= 0)
      {
         close(pd->timer_fd);
@@ -1320,7 +1322,6 @@ _ecore_main_fd_handler_add(Eo                    *obj,
    pd->fd_handlers = (Ecore_Fd_Handler *)
      eina_inlist_append(EINA_INLIST_GET(pd->fd_handlers),
                         EINA_INLIST_GET(fdh));
-
    return fdh;
 }
 
@@ -1606,27 +1607,26 @@ _ecore_main_content_clear(Efl_Loop_Data *pd)
         if (fdh->handler) efl_del(fdh->handler);
         else
           {
-             ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
-             ecore_fd_handler_mp_free(fdh);
+// XXX: can't do this because this fd handler is legacy and might
+// be cleaned up later in object destructors
+//             ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
+//             ecore_fd_handler_mp_free(fdh);
           }
      }
-   if (pd)
-     {
-        if (pd->fd_handlers_with_buffer)
-          pd->fd_handlers_with_buffer =
-            eina_list_free(pd->fd_handlers_with_buffer);
-        if (pd->fd_handlers_with_prep)
-          pd->fd_handlers_with_prep =
-            eina_list_free(pd->fd_handlers_with_prep);
-        if (pd->file_fd_handlers)
-          pd->file_fd_handlers =
-            eina_list_free(pd->file_fd_handlers);
-        if (pd->fd_handlers_to_delete)
-          pd->fd_handlers_to_delete =
-            eina_list_free(pd->fd_handlers_to_delete);
-        pd->fd_handlers_to_call = NULL;
-        pd->fd_handlers_to_call_current = NULL;
-     }
+   if (pd->fd_handlers_with_buffer)
+     pd->fd_handlers_with_buffer =
+       eina_list_free(pd->fd_handlers_with_buffer);
+   if (pd->fd_handlers_with_prep)
+     pd->fd_handlers_with_prep =
+       eina_list_free(pd->fd_handlers_with_prep);
+   if (pd->file_fd_handlers)
+     pd->file_fd_handlers =
+       eina_list_free(pd->file_fd_handlers);
+   if (pd->fd_handlers_to_delete)
+     pd->fd_handlers_to_delete =
+       eina_list_free(pd->fd_handlers_to_delete);
+   pd->fd_handlers_to_call = NULL;
+   pd->fd_handlers_to_call_current = NULL;
 
    pd->do_quit = 0;
 
@@ -1662,7 +1662,6 @@ _ecore_main_shutdown(void)
         ERR("Calling ecore_shutdown() while still in the main loop!!!");
         return;
      }
-   _ecore_main_content_clear(pd);
 }
 
 static void
diff --git a/src/lib/ecore/efl_loop_handler.c b/src/lib/ecore/efl_loop_handler.c
index 417e12d974..7615652b61 100644
--- a/src/lib/ecore/efl_loop_handler.c
+++ b/src/lib/ecore/efl_loop_handler.c
@@ -53,11 +53,15 @@ _handler_clear(Efl_Loop_Handler_Data *pd)
    Efl_Loop_Data *loop = pd->loop_data;
 
    if (pd->handler_fd)
-     _ecore_main_fd_handler_del(obj, loop, pd->handler_fd);
+     {
+        _ecore_main_fd_handler_del(obj, loop, pd->handler_fd);
+        pd->handler_fd = NULL;
+     }
    else if (pd->handler_win32)
-     _ecore_main_win32_handler_del(obj, loop, pd->handler_win32);
-   pd->handler_fd = NULL;
-   pd->handler_win32 = NULL;
+     {
+        _ecore_main_win32_handler_del(obj, loop, pd->handler_win32);
+        pd->handler_win32 = NULL;
+     }
 }
 
 static Ecore_Fd_Handler_Flags
@@ -108,18 +112,10 @@ _handler_reset(Eo *obj, Efl_Loop_Handler_Data *pd)
           _handler_active_update(obj, pd);
         else
           {
-             Ecore_Fd_Handler_Flags flags = _handler_flags_get(pd);
-
-             if (pd->file)
-               pd->handler_fd = _ecore_main_fd_handler_add
-                 (pd->loop, pd->loop_data, obj, pd->fd, flags,
-                  _cb_handler_fd, obj, buffer_func, buffer_data,
-                  EINA_TRUE);
-             else
-               pd->handler_fd = _ecore_main_fd_handler_add
-                 (pd->loop, pd->loop_data, obj, pd->fd, flags,
-                  _cb_handler_fd, obj, buffer_func, buffer_data,
-                  EINA_FALSE);
+             pd->handler_fd = _ecore_main_fd_handler_add
+               (pd->loop, pd->loop_data, obj, pd->fd, _handler_flags_get(pd),
+                _cb_handler_fd, obj, buffer_func, buffer_data,
+                pd->file ? EINA_TRUE : EINA_FALSE);
              if (pd->handler_fd) _handler_active_update(obj, pd);
           }
      }

-- 


Reply via email to