ecore_fd: add _ecore_main_fdh_poll_del() when fd handler is deleted.
authorHosang Kim <hosang12.kim@samsung.com>
Thu, 8 Oct 2015 10:14:00 +0000 (12:14 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 9 Oct 2015 08:00:32 +0000 (10:00 +0200)
Summary:
When fd handler is deleted by ECORE_CALLBACK_CANCEL, _ecore_main_fdh_poll_del() is not called.
So fd still exists in epoll's event pool.

Reviewers: raster, seoz, woohyun, Hermet, cedric

Reviewed By: cedric

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D3131

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
src/lib/ecore/ecore_main.c

index 97cfaf8..e35241d 100644 (file)
@@ -1546,6 +1546,7 @@ _ecore_main_fd_handlers_bads_rem(void)
                        ERR("Fd function err returned 0, remove it");
                        if (!fdh->delete_me)
                          {
+                            _ecore_main_fdh_poll_del(fdh);
                             fdh->delete_me = EINA_TRUE;
                             fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fdh);
                          }
@@ -1558,6 +1559,7 @@ _ecore_main_fd_handlers_bads_rem(void)
                   ERR("Problematic fd found at %d! setting it for delete", fdh->fd);
                   if (!fdh->delete_me)
                     {
+                       _ecore_main_fdh_poll_del(fdh);
                        fdh->delete_me = EINA_TRUE;
                        fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fdh);
                     }
@@ -1673,6 +1675,7 @@ _ecore_main_fd_handlers_call(void)
                      {
                         if (!fdh->delete_me)
                           {
+                             _ecore_main_fdh_poll_del(fdh);
                              fdh->delete_me = EINA_TRUE;
                              fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fdh);
                           }