diff --git a/lib/utils.py b/lib/utils.py index f2f00b56b89e2ecd7634e36306b4e35ac9e168dc..df14049d43732d5d3a5dec5c5d9cc4bf8029f866 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -566,10 +566,12 @@ def RetryOnSignal(fn, *args, **kwargs): while True: try: return fn(*args, **kwargs) - except (EnvironmentError, socket.error), err: + except EnvironmentError, err: if err.errno != errno.EINTR: raise - except select.error, err: + except (socket.error, select.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 @@ -3001,10 +3003,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 d72232ba470fd7dc68d869b6ed8a7aa580cc6943..b329ad7214f766e774041c812d343b35dcc25198 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -2224,9 +2224,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")