diff options
author | Brett Cannon <bcannon@gmail.com> | 2009-04-01 16:06:01 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2009-04-01 16:06:01 (GMT) |
commit | f47e84ce63cc635be75ca56a28aa3dc81cc3c813 (patch) | |
tree | 2cdd66b31294b590cf9feeec4b7698a50628e035 | |
parent | c7485064278efb9231df982866ec2c0051814c74 (diff) | |
download | cpython-f47e84ce63cc635be75ca56a28aa3dc81cc3c813.zip cpython-f47e84ce63cc635be75ca56a28aa3dc81cc3c813.tar.gz cpython-f47e84ce63cc635be75ca56a28aa3dc81cc3c813.tar.bz2 |
Merged revisions 70956 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r70956 | brett.cannon | 2009-04-01 09:00:34 -0700 (Wed, 01 Apr 2009) | 5 lines
The cgitb module had imports in its functions. This can cause deadlock with the
import lock if called from within a thread that was triggered by an import.
Partially fixes issue #1665206.
........
-rw-r--r-- | Lib/cgitb.py | 25 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
2 files changed, 15 insertions, 14 deletions
diff --git a/Lib/cgitb.py b/Lib/cgitb.py index b005511..ad56df2 100644 --- a/Lib/cgitb.py +++ b/Lib/cgitb.py @@ -19,13 +19,19 @@ Alternatively, if you have caught an exception and want cgitb to display it for you, call cgitb.handler(). The optional argument to handler() is a 3-item tuple (etype, evalue, etb) just like the value of sys.exc_info(). The default handler displays output as HTML. -""" - -__author__ = 'Ka-Ping Yee' - -__version__ = '$Revision$' +""" +import inspect +import keyword +import linecache +import os +import pydoc import sys +import tempfile +import time +import tokenize +import traceback +import types def reset(): """Return a string that resets the CGI and browser to a known state.""" @@ -74,7 +80,6 @@ def lookup(name, frame, locals): def scanvars(reader, frame, locals): """Scan one logical line of Python and look up values of variables used.""" - import tokenize, keyword vars, lasttoken, parent, prefix, value = [], None, None, '', __UNDEF__ for ttype, token, start, end, line in tokenize.generate_tokens(reader): if ttype == tokenize.NEWLINE: break @@ -96,8 +101,6 @@ def scanvars(reader, frame, locals): def html(einfo, context=5): """Return a nice HTML document describing a given traceback.""" - import os, time, traceback, linecache, inspect, pydoc - etype, evalue, etb = einfo if isinstance(etype, type): etype = etype.__name__ @@ -173,7 +176,6 @@ function calls leading up to the error, in the order they occurred.</p>''' value = pydoc.html.repr(getattr(evalue, name)) exception.append('\n<br>%s%s =\n%s' % (indent, name, value)) - import traceback return head + ''.join(frames) + ''.join(exception) + ''' @@ -188,8 +190,6 @@ function calls leading up to the error, in the order they occurred.</p>''' def text(einfo, context=5): """Return a plain text document describing a given traceback.""" - import os, time, traceback, linecache, inspect, pydoc - etype, evalue, etb = einfo if isinstance(etype, type): etype = etype.__name__ @@ -245,7 +245,6 @@ function calls leading up to the error, in the order they occurred. value = pydoc.text.repr(getattr(evalue, name)) exception.append('\n%s%s = %s' % (" "*4, name, value)) - import traceback return head + ''.join(frames) + ''.join(exception) + ''' The above is a description of an error in a Python program. Here is @@ -278,7 +277,6 @@ class Hook: try: doc = formatter(info, self.context) except: # just in case something goes wrong - import traceback doc = ''.join(traceback.format_exception(*info)) plain = True @@ -292,7 +290,6 @@ class Hook: self.file.write('<p>A problem occurred in a Python script.\n') if self.logdir is not None: - import os, tempfile suffix = ['.txt', '.html'][self.format=="html"] (fd, path) = tempfile.mkstemp(suffix=suffix, dir=self.logdir) try: @@ -286,6 +286,10 @@ Core and Builtins Library ------- +- Issue #1665206 (partially): Move imports in cgitb to the top of the module + instead of performing them in functions. Helps prevent import deadlocking in + threads. + - Issue #2522: locale.format now checks its first argument to ensure it has been passed only one pattern, avoiding mysterious errors where it appeared that it was failing to do localization. |