I have 2 processes in my program, both use libevent.

I want to call event_base_free() in the child process to free parent's 
event_base before
the next event_init() call. But this doesn't work correctly when using epoll 
because listening
events of epolling descriptors are shared.

See my fix (hack?) for this.

Note that there is another bug in event_base_free() registered in libevent's 
bug tracking
system (2012318):

https://sourceforge.net/tracker/index.php?func=detail&aid=2012318&group_id=50884&atid=461322

Alexander Drozdov
Index: epoll.c
===================================================================
--- epoll.c     (revision 16306)
+++ epoll.c     (revision 16307)
@@ -67,6 +67,7 @@
        struct epoll_event *events;
        int nevents;
        int epfd;
+       pid_t pid;
 };
 
 static void *epoll_init        (struct event_base *);
@@ -155,6 +156,7 @@
                return (NULL);
        }
        epollop->nfds = nfiles;
+       epollop->pid = getpid();
 
        evsignal_init(base);
 
@@ -346,7 +348,7 @@
        if (needwritedelete)
                evep->evwrite = NULL;
 
-       if (epoll_ctl(epollop->epfd, op, fd, &epev) == -1)
+       if (epollop->pid == getpid() && epoll_ctl(epollop->epfd, op, fd, &epev) 
== -1)
                return (-1);
 
        return (0);
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users

Reply via email to