[FIX] actually retry select on EINTR
authorXavier Morel <xmo@openerp.com>
Wed, 19 Feb 2014 15:53:03 +0000 (16:53 +0100)
committerXavier Morel <xmo@openerp.com>
Wed, 19 Feb 2014 15:53:03 +0000 (16:53 +0100)
Turns out select has its own select.error which does *not* subclass
EnvironmentError (or OSError or IOError) and does *not* have a .errno
attribute. So use the correct exception, might just work better than using
a completely different one with no relation.

bzr revid: xmo@openerp.com-20140219155303-sgz7m3gnzr2bmani

openerp/tests/common.py

index 4bc13b6..2f10371 100644 (file)
@@ -197,8 +197,12 @@ class HttpCase(TransactionCase):
             # read a byte
             try:
                 ready, _, _ = select.select([phantom.stdout], [], [], 0.5)
-            except EnvironmentError, e:
-                if e.errno == errno.EINTR: continue
+            except select.error, e:
+                # In Python 2, select.error has no relation to IOError or
+                # OSError, and no errno/strerror/filename, only a pair of
+                # unnamed arguments (matching errno and strerror)
+                err, _ = e.args
+                if err == errno.EINTR: continue
                 raise
 
             if ready: