Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely

when called with a timeout.  Patch by Arnaud Ysmal.
This commit is contained in:
Antoine Pitrou 2011-11-10 00:33:50 +01:00
parent cb65f3249a
commit 6a570d6b9a
3 changed files with 9 additions and 1 deletions

View File

@ -126,7 +126,11 @@ class Queue(object):
if not self._rlock.acquire(block, timeout):
raise Empty
try:
if not self._poll(block and (deadline-time.time()) or 0.0):
if block:
timeout = deadline - time.time()
if timeout < 0 or not self._poll(timeout):
raise Empty
elif not self._poll():
raise Empty
res = self._recv()
self._sem.release()

View File

@ -924,6 +924,7 @@ Bob Yodlowski
Danny Yoo
George Yoshida
Masazumi Yoshikawa
Arnaud Ysmal
Bernard Yue
Moshe Zadka
Milan Zamazal

View File

@ -76,6 +76,9 @@ Core and Builtins
Library
-------
- Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely
when called with a timeout. Patch by Arnaud Ysmal.
- Issue #3067: Enhance the documentation and docstring of
locale.setlocale().