summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2002-09-25 20:32:28 +0000
committerTim Peters <tim.peters@gmail.com>2002-09-25 20:32:28 +0000
commitd8a9d2a0e964d1018f1ba4fa3857a3f061a24137 (patch)
treec43ee55da2227a7d115a0fedf920f468723ce307
parent7dfb6e295b4e4a8a5554debaf93e260c30725f18 (diff)
downloadcpython-git-d8a9d2a0e964d1018f1ba4fa3857a3f061a24137.tar.gz
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.
-rw-r--r--Lib/test/test_threadedtempfile.py10
1 files changed, 4 insertions, 6 deletions
diff --git a/Lib/test/test_threadedtempfile.py b/Lib/test/test_threadedtempfile.py
index 2b5ecf2511..459ba3a1e4 100644
--- a/Lib/test/test_threadedtempfile.py
+++ b/Lib/test/test_threadedtempfile.py
@@ -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()