1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-27 14:04:05 +03:00

tevent: Fix multiple handler on the same fd bug in the tevent select backend.

When we're deciding what handlers to call in the select backend,
we didn't take into account the fact that the same fd may have
been added into the read FD_SET and the write FD_SET but with
different handlers.

We must match on both the file descriptor and the flags requested
before calling the handler.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Jeremy Allison 2013-02-27 10:18:44 -08:00
parent b53c704a34
commit 5ca6914884

View File

@ -210,8 +210,12 @@ static int select_event_loop_select(struct select_event_context *select_ev, stru
for (fde = select_ev->ev->fd_events; fde; fde = fde->next) {
uint16_t flags = 0;
if (FD_ISSET(fde->fd, &r_fds)) flags |= TEVENT_FD_READ;
if (FD_ISSET(fde->fd, &w_fds)) flags |= TEVENT_FD_WRITE;
if (FD_ISSET(fde->fd, &r_fds) && (fde->flags & TEVENT_FD_READ)) {
flags |= TEVENT_FD_READ;
}
if (FD_ISSET(fde->fd, &w_fds) && (fde->flags & TEVENT_FD_WRITE)) {
flags |= TEVENT_FD_WRITE;
}
if (flags) {
fde->handler(select_ev->ev, fde, flags, fde->private_data);
break;