diff options
author | Jeremy Allison <jra@samba.org> | 2011-06-03 12:31:11 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-06-03 22:53:52 +0200 |
commit | dbcdf3e39c359241b743a9455ae695e14a30caa9 (patch) | |
tree | 7b94512cdafe516ea3bd7bee1b065cfc68c650ee | |
parent | 710444d1108252e9a9cc80e963d47b542cc6c2f5 (diff) | |
download | samba-dbcdf3e39c359241b743a9455ae695e14a30caa9.tar.gz samba-dbcdf3e39c359241b743a9455ae695e14a30caa9.tar.bz2 samba-dbcdf3e39c359241b743a9455ae695e14a30caa9.zip |
Fix the poll() backend to correctly respond to POLLHUP|POLLERR returns on a fd selected for TEVENT_FD_WRITE only.
Don't trigger the write handler and remove the POLLOUT flag for this fd. Report errors on TEVENT_FD_READ requests only.
Metze please check !
Jeremy.
Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Fri Jun 3 22:53:52 CEST 2011 on sn-devel-104
-rw-r--r-- | lib/tevent/tevent_poll.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/tevent/tevent_poll.c b/lib/tevent/tevent_poll.c index 712255b373..0b782e99bb 100644 --- a/lib/tevent/tevent_poll.c +++ b/lib/tevent/tevent_poll.c @@ -233,7 +233,19 @@ static int poll_event_loop_poll(struct tevent_context *ev, pfd = &poll_ev->fds[pfd_idx]; - if (pfd->revents & (POLLIN|POLLHUP|POLLERR)) { + if (pfd->revents & (POLLHUP|POLLERR)) { + /* If we only wait for TEVENT_FD_WRITE, we + should not tell the event handler about it, + and remove the writable flag, as we only + report errors when waiting for read events + to match the select behavior. */ + if (!(fde->flags & TEVENT_FD_READ)) { + TEVENT_FD_NOT_WRITEABLE(fde); + continue; + } + flags |= TEVENT_FD_READ; + } + if (pfd->revents & POLLIN) { flags |= TEVENT_FD_READ; } if (pfd->revents & POLLOUT) { |