Commit f47e84ce authored by Brett Cannon's avatar Brett Cannon

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.
........
parent c7485064
......@@ -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&nbsp;=\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.
......
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