mirror of https://github.com/python/cpython.git
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.
This commit is contained in:
parent
7dfb6e295b
commit
d8a9d2a0e9
|
@ -25,12 +25,10 @@
|
|||
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 @@ def run(self):
|
|||
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 @@ def _test():
|
|||
FILES_PER_THREAD = int(v)
|
||||
elif o == "-t":
|
||||
NUM_THREADS = int(v)
|
||||
|
||||
_test()
|
||||
test_main()
|
||||
|
|
Loading…
Reference in New Issue