[New-bugs-announce] [issue27436] Strange code in selectors.KqueueSelector
David Beazley
report at bugs.python.org
Fri Jul 1 11:33:27 EDT 2016
New submission from David Beazley:
Not so much a bug, but an observation based on reviewing the implementation of the selectors.KqueueSelector class. In that class there is the select() method:
def select(self, timeout=None):
timeout = None if timeout is None else max(timeout, 0)
max_ev = len(self._fd_to_key)
ready = []
try:
kev_list = self._kqueue.control(None, max_ev, timeout)
except InterruptedError:
return ready
for kev in kev_list:
fd = kev.ident
flag = kev.filter
events = 0
if flag == select.KQ_FILTER_READ:
events |= EVENT_READ
if flag == select.KQ_FILTER_WRITE:
events |= EVENT_WRITE
key = self._key_from_fd(fd)
if key:
ready.append((key, events & key.events))
return ready
The for-loop looks like it might be checking flags against some kind of bit-mask in order to build events. However, if so, the code just looks wrong. Wouldn't it use the '&' operator (or some variant) instead of '==' like this?
for kev in kev_list:
fd = kev.ident
flag = kev.filter
events = 0
if flag & select.KQ_FILTER_READ:
events |= EVENT_READ
if flag & select.KQ_FILTER_WRITE:
events |= EVENT_WRITE
If it's not a bit-mask, then wouldn't the code be simplified by something like this?
for kev in kev_list:
fd = kev.ident
flag = kev.filter
if flag == select.KQ_FILTER_READ:
events = EVENT_READ
elif flag == select.KQ_FILTER_WRITE:
events = EVENT_WRITE
Again, not sure if this is a bug or not. It's just something that looks weirdly off.
----------
components: Library (Lib)
messages: 269676
nosy: dabeaz
priority: normal
severity: normal
status: open
title: Strange code in selectors.KqueueSelector
type: enhancement
versions: Python 3.6
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue27436>
_______________________________________
More information about the New-bugs-announce
mailing list