Commit 0c8ad61c authored by Giampaolo Rodola's avatar Giampaolo Rodola

fix for previous commit related to issue 10527 which didn't have the intended...

fix for previous commit related to issue 10527 which didn't have the intended effect as per http://bugs.python.org/issue10527#msg179895
parent 0ee84e04
...@@ -509,27 +509,6 @@ if sys.platform != 'win32': ...@@ -509,27 +509,6 @@ if sys.platform != 'win32':
return c1, c2 return c1, c2
else: 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): def Pipe(duplex=True):
''' '''
...@@ -883,6 +862,29 @@ if sys.platform == 'win32': ...@@ -883,6 +862,29 @@ if sys.platform == 'win32':
else: 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): def wait(object_list, timeout=None):
''' '''
Wait till an object in object_list is ready/readable. Wait till an object in object_list is ready/readable.
...@@ -891,12 +893,12 @@ else: ...@@ -891,12 +893,12 @@ else:
''' '''
if timeout is not None: if timeout is not None:
if timeout <= 0: if timeout <= 0:
return select.select(object_list, [], [], 0)[0] return _poll(object_list, 0)
else: else:
deadline = time.time() + timeout deadline = time.time() + timeout
while True: while True:
try: try:
return select.select(object_list, [], [], timeout)[0] return _poll(object_list, timeout)
except OSError as e: except OSError as e:
if e.errno != errno.EINTR: if e.errno != errno.EINTR:
raise raise
......
...@@ -3263,7 +3263,7 @@ class TestWait(unittest.TestCase): ...@@ -3263,7 +3263,7 @@ class TestWait(unittest.TestCase):
from multiprocessing.connection import wait from multiprocessing.connection import wait
expected = 3 expected = 3
sorted_ = lambda l: sorted(l, key=lambda x: isinstance(x, int)) sorted_ = lambda l: sorted(l, key=lambda x: id(x))
sem = multiprocessing.Semaphore(0) sem = multiprocessing.Semaphore(0)
a, b = multiprocessing.Pipe() a, b = multiprocessing.Pipe()
p = multiprocessing.Process(target=self.signal_and_sleep, p = multiprocessing.Process(target=self.signal_and_sleep,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment