瀏覽代碼

Fallback to arg[0] if errno does not exist. Fixes #4513.

Omer Katz 7 年之前
父節點
當前提交
cbcbda217e
共有 1 個文件被更改,包括 14 次插入3 次删除
  1. 14 3
      celery/concurrency/asynpool.py

+ 14 - 3
celery/concurrency/asynpool.py

@@ -179,14 +179,25 @@ def _select(readers=None, writers=None, err=None, timeout=0,
     try:
         return poll(readers, writers, err, timeout)
     except (select.error, socket.error) as exc:
-        if exc.errno == errno.EINTR:
+        # Workaround for celery/celery#4513
+        try:
+            errno = exc.errno
+        except AttributeError:
+            errno = exc.args[0]
+        
+        if errno == errno.EINTR:
             return set(), set(), 1
-        elif exc.errno in SELECT_BAD_FD:
+        elif errno in SELECT_BAD_FD:
             for fd in readers | writers | err:
                 try:
                     select.select([fd], [], [], 0)
                 except (select.error, socket.error) as exc:
-                    if getattr(exc, 'errno', None) not in SELECT_BAD_FD:
+                    try:
+                        errno = exc.errno
+                    except AttributeError:
+                        errno = exc.args[0]
+
+                    if errno not in SELECT_BAD_FD:
                         raise
                     readers.discard(fd)
                     writers.discard(fd)