From e94d8fab5671b1d76c76881b20ec133a627d7936 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 5 Nov 2002 18:41:20 +0000 Subject: Fix an old bug in poll(). When a signal is handled while we're blocked in select(), this will raise select.error with errno set to EINTR. The except clauses correctly ignores this error, but the rest of the logic will then call read() for all objects in select's *input* list of read file descriptors. Then when an object's read_handler() is naive, it will call recv() on its socket, which will raise an IOError, and then asyncore decides to close the socket. To fix this, we simply return in this case. Backport candidate. --- Lib/asyncore.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/asyncore.py b/Lib/asyncore.py index 33d414a..2c94813 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -109,6 +109,8 @@ def poll(timeout=0.0, map=None): except select.error, err: if err[0] != EINTR: raise + else: + return for fd in r: obj = map.get(fd) -- cgit v0.12