diff options
| author | Simon <simon@hardwired.org.uk> | 2011-03-22 17:58:52 (GMT) |
|---|---|---|
| committer | Simon <simon@hardwired.org.uk> | 2011-03-22 17:58:52 (GMT) |
| commit | 2e401babb793238564ca640fc802a52ab7f6c293 (patch) | |
| tree | 87a9b471e82604e76f96d556f5771322fb31818a /src/python/stdlib/test/threaded_import_hangers.py | |
| parent | c096b2b14a200a0cc0a08cfea839c9e7f4edf22e (diff) | |
| parent | 04a9cbcb8855e64db660a8c6e23d79114b4afd83 (diff) | |
| download | powder-2e401babb793238564ca640fc802a52ab7f6c293.zip powder-2e401babb793238564ca640fc802a52ab7f6c293.tar.gz | |
Python console
Diffstat (limited to 'src/python/stdlib/test/threaded_import_hangers.py')
| -rw-r--r-- | src/python/stdlib/test/threaded_import_hangers.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/python/stdlib/test/threaded_import_hangers.py b/src/python/stdlib/test/threaded_import_hangers.py new file mode 100644 index 0000000..d750874 --- /dev/null +++ b/src/python/stdlib/test/threaded_import_hangers.py @@ -0,0 +1,42 @@ +# This is a helper module for test_threaded_import. The test imports this +# module, and this module tries to run various Python library functions in +# their own thread, as a side effect of being imported. If the spawned +# thread doesn't complete in TIMEOUT seconds, an "appeared to hang" message +# is appended to the module-global `errors` list. That list remains empty +# if (and only if) all functions tested complete. + +TIMEOUT = 10 + +import threading + +import tempfile +import os.path + +errors = [] + +# This class merely runs a function in its own thread T. The thread importing +# this module holds the import lock, so if the function called by T tries +# to do its own imports it will block waiting for this module's import +# to complete. +class Worker(threading.Thread): + def __init__(self, function, args): + threading.Thread.__init__(self) + self.function = function + self.args = args + + def run(self): + self.function(*self.args) + +for name, func, args in [ + # Bug 147376: TemporaryFile hung on Windows, starting in Python 2.4. + ("tempfile.TemporaryFile", tempfile.TemporaryFile, ()), + + # The real cause for bug 147376: ntpath.abspath() caused the hang. + ("os.path.abspath", os.path.abspath, ('.',)), + ]: + + t = Worker(func, args) + t.start() + t.join(TIMEOUT) + if t.is_alive(): + errors.append("%s appeared to hang" % name) |
