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.



SVN revision: 53672
This commit is contained in:
Carsten Haitzler 2010-10-20 14:21:19 +00:00
parent 0bad021252
commit c71c55c38c
1 changed files with 12 additions and 3 deletions

View File

@ -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;