@@ -430,6 +430,9 @@ class PollSelector(_PollLikeSelector):
430
430
431
431
if hasattr (select , 'epoll' ):
432
432
433
+ _NOT_EPOLLIN = ~ select .EPOLLIN
434
+ _NOT_EPOLLOUT = ~ select .EPOLLOUT
435
+
433
436
class EpollSelector (_PollLikeSelector ):
434
437
"""Epoll-based selector."""
435
438
_selector_cls = select .epoll
@@ -452,22 +455,20 @@ def select(self, timeout=None):
452
455
# epoll_wait() expects `maxevents` to be greater than zero;
453
456
# we want to make sure that `select()` can be called when no
454
457
# FD is registered.
455
- max_ev = max ( len (self ._fd_to_key ), 1 )
458
+ max_ev = len (self ._fd_to_key ) or 1
456
459
457
460
ready = []
458
461
try :
459
462
fd_event_list = self ._selector .poll (timeout , max_ev )
460
463
except InterruptedError :
461
464
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
468
465
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 )
470
469
if key :
470
+ events = ((event & _NOT_EPOLLIN and EVENT_WRITE )
471
+ | (event & _NOT_EPOLLOUT and EVENT_READ ))
471
472
ready .append ((key , events & key .events ))
472
473
return ready
473
474
0 commit comments