Commit bb574ffd authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time.

Patch by Florian Finkernagel and Davin Potts.
parent 3908d7de
......@@ -44,10 +44,10 @@ import weakref
from Queue import Empty, Full
import _multiprocessing
from multiprocessing import Pipe
from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition
from multiprocessing.util import debug, info, Finalize, register_after_fork
from multiprocessing.forking import assert_spawning
from . import Pipe
from .synchronize import Lock, BoundedSemaphore, Semaphore, Condition
from .util import debug, info, Finalize, register_after_fork, is_exiting
from .forking import assert_spawning
#
# Queue type using a pipe, buffer and thread
......@@ -229,8 +229,6 @@ class Queue(object):
@staticmethod
def _feed(buffer, notempty, send, writelock, close):
debug('starting thread to feed data to pipe')
from .util import is_exiting
nacquire = notempty.acquire
nrelease = notempty.release
nwait = notempty.wait
......
......@@ -620,6 +620,26 @@ class _TestQueue(BaseTestCase):
for p in workers:
p.join()
def test_no_import_lock_contention(self):
with test_support.temp_cwd():
module_name = 'imported_by_an_imported_module'
with open(module_name + '.py', 'w') as f:
f.write("""if 1:
import multiprocessing
q = multiprocessing.Queue()
q.put('knock knock')
q.get(timeout=3)
q.close()
""")
with test_support.DirsOnSysPath(os.getcwd()):
try:
__import__(module_name)
except Queue.Empty:
self.fail("Probable regression on import lock contention;"
" see Issue #22853")
#
#
#
......
......@@ -411,6 +411,7 @@ Vincent Fiack
Anastasia Filatova
Tomer Filiba
Jeffrey Finkelstein
Florian Finkernagel
Russell Finn
Dan Finnie
Nils Fischbeck
......@@ -1073,6 +1074,7 @@ Martin Pool
Iustin Pop
Claudiu Popa
John Popplewell
Davin Potts
Guillaume Pratte
Amrit Prem
Paul Prescod
......
......@@ -18,6 +18,9 @@ Core and Builtins
Library
-------
- Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time.
Patch by Florian Finkernagel and Davin Potts.
- Issue #23476: In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST
flag on certificate stores when it is available.
......
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