diff options
author | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-01-14 01:24:25 (GMT) |
---|---|---|
committer | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-01-14 01:24:25 (GMT) |
commit | 67da89446a0b3f008a15e6a510925921ca6f9303 (patch) | |
tree | 59449aad59df582e90c4571dc7961eb901882f2f /Lib/multiprocessing | |
parent | ed9e06cb21c4437aa87bb23c6509d3dd3274d0fc (diff) | |
download | cpython-67da89446a0b3f008a15e6a510925921ca6f9303.zip cpython-67da89446a0b3f008a15e6a510925921ca6f9303.tar.gz cpython-67da89446a0b3f008a15e6a510925921ca6f9303.tar.bz2 |
fix for previous commit related to issue 10527 which didn't have the intended effect as per http://bugs.python.org/issue10527#msg179895
Diffstat (limited to 'Lib/multiprocessing')
-rw-r--r-- | Lib/multiprocessing/connection.py | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 25b0326..1d65f46 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -509,27 +509,6 @@ if sys.platform != 'win32': return c1, c2 else: - if hasattr(select, 'poll'): - def _poll(fds, timeout): - if timeout is not None: - timeout = int(timeout) * 1000 # timeout is in milliseconds - fd_map = {} - pollster = select.poll() - for fd in fds: - pollster.register(fd, select.POLLIN) - if hasattr(fd, 'fileno'): - fd_map[fd.fileno()] = fd - else: - fd_map[fd] = fd - ls = [] - for fd, event in pollster.poll(timeout): - if event & select.POLLNVAL: - raise ValueError('invalid file descriptor %i' % fd) - ls.append(fd_map[fd]) - return ls - else: - def _poll(fds, timeout): - return select.select(fds, [], [], timeout)[0] def Pipe(duplex=True): ''' @@ -883,6 +862,29 @@ if sys.platform == 'win32': else: + if hasattr(select, 'poll'): + def _poll(fds, timeout): + if timeout is not None: + timeout = int(timeout) * 1000 # timeout is in milliseconds + fd_map = {} + pollster = select.poll() + for fd in fds: + pollster.register(fd, select.POLLIN) + if hasattr(fd, 'fileno'): + fd_map[fd.fileno()] = fd + else: + fd_map[fd] = fd + ls = [] + for fd, event in pollster.poll(timeout): + if event & select.POLLNVAL: + raise ValueError('invalid file descriptor %i' % fd) + ls.append(fd_map[fd]) + return ls + else: + def _poll(fds, timeout): + return select.select(fds, [], [], timeout)[0] + + def wait(object_list, timeout=None): ''' Wait till an object in object_list is ready/readable. @@ -891,12 +893,12 @@ else: ''' if timeout is not None: if timeout <= 0: - return select.select(object_list, [], [], 0)[0] + return _poll(object_list, 0) else: deadline = time.time() + timeout while True: try: - return select.select(object_list, [], [], timeout)[0] + return _poll(object_list, timeout) except OSError as e: if e.errno != errno.EINTR: raise |