diff --git a/lib/utils.py b/lib/utils.py index e3dd435649696c8d32f2c85e2c7a8800e530b7b4..2909f866418db6b21b17d0e80b09d4ba80a17b30 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -2518,10 +2518,12 @@ def IgnoreSignals(fn, *args, **kwargs): """ try: return fn(*args, **kwargs) - except (EnvironmentError, socket.error), err: + except EnvironmentError, err: if err.errno != errno.EINTR: raise - except select.error, err: + except (select.error, socket.error), err: + # In python 2.6 and above select.error is an IOError, so it's handled + # above, in 2.5 and below it's not, and it's handled here. if not (err.args and err.args[0] == errno.EINTR): raise diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 548d04eed09e70a5ab2d2272fdfae29af330ec13..a78115f077b1e2539842a9ebe5b12a4948663764 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -1836,9 +1836,7 @@ class TestIgnoreSignals(unittest.TestCase): def testIgnoreSignals(self): sock_err_intr = socket.error(errno.EINTR, "Message") - sock_err_intr.errno = errno.EINTR sock_err_inval = socket.error(errno.EINVAL, "Message") - sock_err_inval.errno = errno.EINVAL env_err_intr = EnvironmentError(errno.EINTR, "Message") env_err_inval = EnvironmentError(errno.EINVAL, "Message")