diff options
author | Volker Lendecke <vl@samba.org> | 2010-06-10 09:41:11 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2010-06-10 11:24:00 +0200 |
commit | 7f29f817fa939ef1bbb740584f09e76e2ecd5b06 (patch) | |
tree | 2947be828913c96b0217701e05e2308d8345ad15 /lib/tevent | |
parent | 9fdb69ebcdca9e56e39affd7a35d1ccb28daad5c (diff) | |
download | samba-7f29f817fa939ef1bbb740584f09e76e2ecd5b06.tar.gz samba-7f29f817fa939ef1bbb740584f09e76e2ecd5b06.tar.bz2 samba-7f29f817fa939ef1bbb740584f09e76e2ecd5b06.zip |
tevent: Fix maxfd calculation in tevent_select
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
Diffstat (limited to 'lib/tevent')
-rw-r--r-- | lib/tevent/tevent_select.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/tevent/tevent_select.c b/lib/tevent/tevent_select.c index 1598094d2d..8cc6d06a59 100644 --- a/lib/tevent/tevent_select.c +++ b/lib/tevent/tevent_select.c @@ -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); |