@@ -430,6 +430,9 @@ class PollSelector(_PollLikeSelector):
430430
431431if hasattr (select , 'epoll' ):
432432
433+ _NOT_EPOLLIN = ~ select .EPOLLIN
434+ _NOT_EPOLLOUT = ~ select .EPOLLOUT
435+
433436 class EpollSelector (_PollLikeSelector ):
434437 """Epoll-based selector."""
435438 _selector_cls = select .epoll
@@ -452,22 +455,20 @@ def select(self, timeout=None):
452455 # epoll_wait() expects `maxevents` to be greater than zero;
453456 # we want to make sure that `select()` can be called when no
454457 # FD is registered.
455- max_ev = max ( len (self ._fd_to_key ), 1 )
458+ max_ev = len (self ._fd_to_key ) or 1
456459
457460 ready = []
458461 try :
459462 fd_event_list = self ._selector .poll (timeout , max_ev )
460463 except InterruptedError :
461464 return ready
462- for fd , event in fd_event_list :
463- events = 0
464- if event & ~ select .EPOLLIN :
465- events |= EVENT_WRITE
466- if event & ~ select .EPOLLOUT :
467- events |= EVENT_READ
468465
469- key = self ._fd_to_key .get (fd )
466+ fd_to_key = self ._fd_to_key
467+ for fd , event in fd_event_list :
468+ key = fd_to_key .get (fd )
470469 if key :
470+ events = ((event & _NOT_EPOLLIN and EVENT_WRITE )
471+ | (event & _NOT_EPOLLOUT and EVENT_READ ))
471472 ready .append ((key , events & key .events ))
472473 return ready
473474
0 commit comments