ecore: Create a lockless ecore_main_fd_handler_del
authormike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 12 Aug 2011 05:22:07 +0000 (05:22 +0000)
committermike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 12 Aug 2011 05:22:07 +0000 (05:22 +0000)
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@62374 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore/ecore_main.c
src/lib/ecore/ecore_pipe.c
src/lib/ecore/ecore_private.h

index cdca336..df41acf 100644 (file)
@@ -789,6 +789,25 @@ _ecore_main_loop_shutdown(void)
      }
 }
 
+void *
+_ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler)
+{
+   if (fd_handler->delete_me)
+     {
+        ERR("fdh %p deleted twice", fd_handler);
+        return NULL;
+     }
+
+   _ecore_main_fdh_poll_del(fd_handler);
+   fd_handler->delete_me = EINA_TRUE;
+   fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fd_handler);
+   if (fd_handler->prep_func && fd_handlers_with_prep)
+     fd_handlers_with_prep = eina_list_remove(fd_handlers_with_prep, fd_handler);
+   if (fd_handler->buf_func && fd_handlers_with_buffer)
+     fd_handlers_with_buffer = eina_list_remove(fd_handlers_with_buffer, fd_handler);
+   return fd_handler->data;
+}
+
 /**
  * @addtogroup Ecore_Main_Loop_Group
  *
@@ -998,6 +1017,7 @@ ecore_main_win32_handler_add(void *h __UNUSED__, Ecore_Win32_Handle_Cb func __UN
 }
 #endif
 
+
 /**
  * Deletes the given FD handler.
  * @param   fd_handler The given FD handler.
@@ -1023,20 +1043,7 @@ ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler)
                          "ecore_main_fd_handler_del");
         goto unlock;
      }
-   if (fd_handler->delete_me)
-     {
-        ERR("fdh %p deleted twice", fd_handler);
-        goto unlock;
-     }
-
-   _ecore_main_fdh_poll_del(fd_handler);
-   fd_handler->delete_me = EINA_TRUE;
-   fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fd_handler);
-   if (fd_handler->prep_func && fd_handlers_with_prep)
-     fd_handlers_with_prep = eina_list_remove(fd_handlers_with_prep, fd_handler);
-   if (fd_handler->buf_func && fd_handlers_with_buffer)
-     fd_handlers_with_buffer = eina_list_remove(fd_handlers_with_buffer, fd_handler);
-   ret = fd_handler->data;
+   ret = _ecore_main_fd_handler_del(fd_handler);
 unlock:
    _ecore_unlock();
    return ret;
index 9e290de..38c6222 100644 (file)
@@ -157,7 +157,7 @@ ecore_pipe_del(Ecore_Pipe *p)
      }
    p->delete_me = EINA_TRUE;
    if (p->handling > 0) return (void *)p->data;
-   if (p->fd_handler) ecore_main_fd_handler_del(p->fd_handler);
+   if (p->fd_handler) _ecore_main_fd_handler_del(p->fd_handler);
    if (p->fd_read != PIPE_FD_INVALID) pipe_close(p->fd_read);
    if (p->fd_write != PIPE_FD_INVALID) pipe_close(p->fd_write);
    data = (void *)p->data;
@@ -180,7 +180,7 @@ ecore_pipe_read_close(Ecore_Pipe *p)
      }
    if (p->fd_handler)
      {
-        ecore_main_fd_handler_del(p->fd_handler);
+        _ecore_main_fd_handler_del(p->fd_handler);
         p->fd_handler = NULL;
      }
    if (p->fd_read != PIPE_FD_INVALID)
@@ -207,7 +207,7 @@ ecore_pipe_freeze(Ecore_Pipe *p)
      }
    if (p->fd_handler)
      {
-        ecore_main_fd_handler_del(p->fd_handler);
+        _ecore_main_fd_handler_del(p->fd_handler);
         p->fd_handler = NULL;
      }
 }
index 2982de3..59b969a 100644 (file)
@@ -157,6 +157,8 @@ void         *_ecore_event_signal_exit_new(void);
 void         *_ecore_event_signal_power_new(void);
 void         *_ecore_event_signal_realtime_new(void);
 
+void         *_ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler);
+
 void          _ecore_main_shutdown(void);
 
 #ifdef _WIN32