Kaydet (Commit) d8a9d2a0 authored tarafından Tim Peters's avatar Tim Peters

SF bug 613233: test_threadedtempfile hangs

A possibility to deadlock (on the hidden import lock) was created here
in 2.3, seemingly when tempfile.py started to call functions in
random.py.  The cure is "the usual":  don't spawn threads as a side
effect of importing, when the spawned threads themselves do imports
(directly or indirectly), and the code that spawned the threads is
waiting for the threads to finish (they can't finish, because they're
waiting for the import lock the spawner still holds).  Worming around
this is why the "test_main" mechanism was introduced in regrest, so
it's a straightforward fix.

NOT a bugfix candidate; the problem was introduced in 2.3.
üst 7dfb6e29
......@@ -25,12 +25,10 @@ import threading
from test.test_support import TestFailed
import StringIO
from traceback import print_exc
import tempfile
startEvent = threading.Event()
import tempfile
tempfile.gettempdir() # Do this now, to avoid spurious races later
class TempFileGreedy(threading.Thread):
error_count = 0
ok_count = 0
......@@ -48,7 +46,7 @@ class TempFileGreedy(threading.Thread):
else:
self.ok_count += 1
def _test():
def test_main():
threads = []
print "Creating"
......@@ -74,6 +72,7 @@ def _test():
if errors:
raise TestFailed(msg)
if __name__ == "__main__":
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "t:f:")
......@@ -82,5 +81,4 @@ if __name__ == "__main__":
FILES_PER_THREAD = int(v)
elif o == "-t":
NUM_THREADS = int(v)
_test()
test_main()
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