From df9b57c5c5bea163f6dda7a11f0cad5dfb917f71 Mon Sep 17 00:00:00 2001 From: raster Date: Wed, 20 Oct 2010 14:21:19 +0000 Subject: [PATCH] patch from mike to fix kernel issue with closed fd's+ epoll to re-init epoll fd set. also fix "WARN->WRN and no \n in the patch. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@53672 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/ecore/ecore_main.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c index f9d142f..9435cce 100644 --- a/src/lib/ecore/ecore_main.c +++ b/src/lib/ecore/ecore_main.c @@ -237,10 +237,19 @@ _ecore_main_fdh_poll_del(Ecore_Fd_Handler *fdh) memset(&ev, 0, sizeof (ev)); INF("removing poll on %d", fdh->fd); /* could get an EBADF if somebody closed the FD before removing it */ - if ((epoll_ctl(efd, EPOLL_CTL_DEL, fdh->fd, &ev) < 0) && - (errno != EBADF)) + if ((epoll_ctl(efd, EPOLL_CTL_DEL, fdh->fd, &ev) < 0)) { - ERR("Failed to delete epoll fd %d! (errno=%d)", fdh->fd, errno); + if (errno == EBADF) + { + WRN("fd %d was closed, can't remove from epoll - reinit!", + fdh->fd); + _ecore_main_loop_shutdown(); + _ecore_main_loop_init(); + } + else + { + ERR("Failed to delete epoll fd %d! (errno=%d)", fdh->fd, errno); + } } #elif USE_G_MAIN_LOOP fdh->gfd.fd = fdh->fd; -- 2.7.4