issue #249: restore duplex behaviour for epoll
With epoll() there is only one kernel-side object per file descriptor, which is why _control() is such a pain. Since we merge receive/transmit watching into that single object, we must always test the mask for both conditions when reading results. Kqueue isn't/doesn't appear to be like this. The identity of a Kqueue event is keyed on (fd, filter), and we register a separate event for both transmit and receive, so the 'elif' in KqueuePoller.poll() does not appear to need to change. Previously, a FD marked for read+write would not indicate writeability until it was no longer readable.
This commit is contained in:
parent
6b98818046
commit
6d18ce81d8
|
@ -647,7 +647,7 @@ class EpollPoller(Poller):
|
|||
# Events can still be read for an already-discarded fd.
|
||||
mitogen.core._vv and IOLOG.debug('%r: POLLIN: %r', self, fd)
|
||||
yield self._rfds[fd]
|
||||
elif event & select.EPOLLOUT and fd in self._wfds:
|
||||
if event & select.EPOLLOUT and fd in self._wfds:
|
||||
mitogen.core._vv and IOLOG.debug('%r: POLLOUT: %r', self, fd)
|
||||
yield self._wfds[fd]
|
||||
|
||||
|
|
Loading…
Reference in New Issue