tevent: Fix maxfd calculation in tevent_select
authorVolker Lendecke <vl@samba.org>
Thu, 10 Jun 2010 07:41:11 +0000 (09:41 +0200)
committerVolker Lendecke <vl@samba.org>
Thu, 10 Jun 2010 09:24:00 +0000 (11:24 +0200)
When doing

        fd1 = tevent_add_fd(ev, ev, 2, 0, NULL, NULL);
        fd2 = tevent_add_fd(ev, ev, 3, 0, NULL, NULL);
        TALLOC_FREE(fd2);
        fd2 = tevent_add_fd(ev, ev, 1, 0, NULL, NULL);

we end up with select_ev->maxfd==1. This is wrong.

An alternative fix might be to make select_ev->maxfd an unsigned int and make
EVENT_INVALID_MAXFD==UINT_MAX. But in theory we might end up with an fd of
UINT_MAX.

std_event_add_fd() contains exactly the same piece of code, so I'm directly
pushing it.

Volker

lib/tevent/tevent_select.c

index 1598094d2d5dc87927ffab36e6f94f8f3e467def..8cc6d06a59d6042f4c43ac1a86d71a68bdcd298a 100644 (file)
@@ -116,7 +116,8 @@ static struct tevent_fd *select_event_add_fd(struct tevent_context *ev, TALLOC_C
                                   handler_name, location);
        if (!fde) return NULL;
 
-       if (fde->fd > select_ev->maxfd) {
+       if ((select_ev->maxfd != EVENT_INVALID_MAXFD)
+           && (fde->fd > select_ev->maxfd)) {
                select_ev->maxfd = fde->fd;
        }
        talloc_set_destructor(fde, select_event_fd_destructor);