tevent: If epoll_ctl(..EPOLL_CTL_ADD,..) failes with EEXIST, merge the two fde's...
authorJeremy Allison <jra@samba.org>
Thu, 14 Feb 2013 21:52:41 +0000 (13:52 -0800)
committerStefan Metzmacher <metze@samba.org>
Tue, 26 Feb 2013 15:44:02 +0000 (16:44 +0100)
Signed-off-by: Jeremy Allison <jra@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/tevent/tevent_epoll.c

index 6812939273cb33ef48ac83d63162992739a0de59..f59c12d7e01cf4024e38266a2f33a9c5b3a0232a 100644 (file)
@@ -391,6 +391,13 @@ static void epoll_add_event(struct epoll_event_context *epoll_ev, struct tevent_
                             "EPOLL_CTL_ADD for fd[%d] ignoring EBADF\n",
                             fde->fd);
                return;
+       } else if (ret != 0 && errno == EEXIST && mpx_fde == NULL) {
+               ret = epoll_add_multiplex_fd(epoll_ev, fde);
+               if (ret != 0) {
+                       epoll_panic(epoll_ev, "epoll_add_multiplex_fd failed",
+                                   false);
+                       return;
+               }
        } else if (ret != 0) {
                epoll_panic(epoll_ev, "EPOLL_CTL_ADD failed", false);
                return;