mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +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:
parent
b53c704a34
commit
5ca6914884
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user