Hi Guys,

Superficially tested... issue is if somebody does:

close(fd);
ecore_main_fd_handler_del(fdh);

epoll can't remove the fd because it's already closed, so we get an EBADF from 
the kernel.
Work around the broken case by issuing a WARN() and reinitializing ecore.

thanks,

Mike

>From bba7e843c58983278dbee18adee02e52da972207 Mon Sep 17 00:00:00 2001
From: Mike McCormack <[email protected]>
Date: Tue, 19 Oct 2010 22:10:40 +0900
Subject: [PATCH 2/2] Reinit main loop if somebody passes a closed fd to epoll

---
 trunk/ecore/src/lib/ecore/ecore_main.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/trunk/ecore/src/lib/ecore/ecore_main.c b/trunk/ecore/src/lib/ecore/ecore_main.c
index f9d142f..e518566 100644
--- a/trunk/ecore/src/lib/ecore/ecore_main.c
+++ b/trunk/ecore/src/lib/ecore/ecore_main.c
@@ -237,10 +237,18 @@ _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)
+          {
+             WARN("fd %d was closed, can't remove from epoll - reinit!\n", 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;
-- 
1.7.0.4

------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to