Refactored poll's wait method so it makes more sense.

This commit is contained in:
Ryan Williams
2009-08-13 17:35:26 -07:00
parent 253f2d3f1f
commit 9f50025e68

View File

@@ -88,27 +88,23 @@ class Hub(hub.BaseHub):
SYSTEM_EXCEPTIONS = self.SYSTEM_EXCEPTIONS SYSTEM_EXCEPTIONS = self.SYSTEM_EXCEPTIONS
for fileno, event in presult: for fileno, event in presult:
for dct, mask in ((readers, READ_MASK), (writers, WRITE_MASK)):
if not mask & event:
continue
listeners = dct.get(fileno)
if listeners:
try: try:
if event & READ_MASK:
listeners = readers.get(fileno)
if listeners:
listeners[0](fileno)
if event & WRITE_MASK:
listeners = writers.get(fileno)
if listeners:
listeners[0](fileno) listeners[0](fileno)
except SYSTEM_EXCEPTIONS:
raise
except:
self.squelch_exception(fileno, sys.exc_info())
for fileno, event in presult:
if not EXC_MASK & event:
continue
if event & select.POLLNVAL: if event & select.POLLNVAL:
self.remove_descriptor(fileno) self.remove_descriptor(fileno)
continue continue
for listeners in (readers.get(fileno), writers.get(fileno)): if event & EXC_MASK:
if listeners: for listeners in (readers.get(fileno, []),
try: writers.get(fileno, [])):
listeners[0](fileno) for listener in listeners:
listener(fileno)
except SYSTEM_EXCEPTIONS: except SYSTEM_EXCEPTIONS:
raise raise
except: except: