Patch #468647: Fix exception propagation in asyncore.
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index e970162..00b02e3 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -85,26 +85,28 @@
for fd in r:
try:
obj = map[fd]
- try:
- obj.handle_read_event()
- except ExitNow:
- raise ExitNow
- except:
- obj.handle_error()
except KeyError:
- pass
+ continue
+
+ try:
+ obj.handle_read_event()
+ except ExitNow:
+ raise ExitNow
+ except:
+ obj.handle_error()
for fd in w:
try:
obj = map[fd]
- try:
- obj.handle_write_event()
- except ExitNow:
- raise ExitNow
- except:
- obj.handle_error()
except KeyError:
- pass
+ continue
+
+ try:
+ obj.handle_write_event()
+ except ExitNow:
+ raise ExitNow
+ except:
+ obj.handle_error()
def poll2 (timeout=0.0, map=None):
import poll
@@ -127,17 +129,18 @@
for fd, flags in r:
try:
obj = map[fd]
- try:
- if (flags & poll.POLLIN):
- obj.handle_read_event()
- if (flags & poll.POLLOUT):
- obj.handle_write_event()
- except ExitNow:
- raise ExitNow
- except:
- obj.handle_error()
except KeyError:
- pass
+ continue
+
+ try:
+ if (flags & poll.POLLIN):
+ obj.handle_read_event()
+ if (flags & poll.POLLOUT):
+ obj.handle_write_event()
+ except ExitNow:
+ raise ExitNow
+ except:
+ obj.handle_error()
def poll3 (timeout=0.0, map=None):
# Use the poll() support added to the select module in Python 2.0
@@ -160,17 +163,18 @@
for fd, flags in r:
try:
obj = map[fd]
- try:
- if (flags & select.POLLIN):
- obj.handle_read_event()
- if (flags & select.POLLOUT):
- obj.handle_write_event()
- except ExitNow:
- raise ExitNow
- except:
- obj.handle_error()
except KeyError:
- pass
+ continue
+
+ try:
+ if (flags & select.POLLIN):
+ obj.handle_read_event()
+ if (flags & select.POLLOUT):
+ obj.handle_write_event()
+ except ExitNow:
+ raise ExitNow
+ except:
+ obj.handle_error()
def loop (timeout=30.0, use_poll=0, map=None):