From ae60b9e2b493eed7bc96450850731f606cfd3e97 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 21 Feb 2003 07:16:37 +0000 Subject: [PATCH] Backport 1.38: 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. Backport 1.40: Fix spelling error --- Lib/asyncore.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/asyncore.py b/Lib/asyncore.py index bae416b56063..d9d2fd84bc74 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -84,7 +84,8 @@ def poll (timeout=0.0, map=None): except select.error, err: if err[0] != EINTR: raise - r = []; w = []; e = [] + else: + return if DEBUG: print r,w,e @@ -370,7 +371,7 @@ class dispatcher: def __getattr__ (self, attr): return getattr (self.socket, attr) - # log and log_info maybe overriden to provide more sophisitcated + # log and log_info maybe overriden to provide more sophisticated # logging and warning methods. In general, log is for 'hit' logging # and 'log_info' is for informational, warning and error logging. -- 2.47.3