Kaydet (Commit) 6ccc7038 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

Merged revisions 66677,66700 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r66677 | brett.cannon | 2008-09-28 22:41:21 -0500 (Sun, 28 Sep 2008) | 7 lines

  The _lsprof module could crash the interpreter if it was given an external
  timer that did not return a float and a timer was still running when the
  Profiler object was garbage collected.

  Fixes issue 3895.
  Code review by Benjamin Peterson.
........
  r66700 | brett.cannon | 2008-09-30 12:46:03 -0500 (Tue, 30 Sep 2008) | 5 lines

  Fix a refleak introduced by r66677.

  Fix suggested by Amaury Forgeot d'Arc.
  Closes issue #4003.
........
üst f259bc42
"""Test suite for the cProfile module.""" """Test suite for the cProfile module."""
import sys import sys
from test.support import run_unittest from test.support import run_unittest, TESTFN, unlink
# rip off all interesting stuff from test_profile # rip off all interesting stuff from test_profile
import cProfile import cProfile
...@@ -13,6 +13,20 @@ class CProfileTest(ProfileTest): ...@@ -13,6 +13,20 @@ class CProfileTest(ProfileTest):
def get_expected_output(self): def get_expected_output(self):
return _ProfileOutput return _ProfileOutput
# Issue 3895.
def test_bad_counter_during_dealloc(self):
import _lsprof
# Must use a file as StringIO doesn't trigger the bug.
sys.stderr = open(TESTFN, 'w')
try:
obj = _lsprof.Profiler(lambda: int)
obj.enable()
obj = _lsprof.Profiler(1)
obj.disable()
finally:
sys.stderr = sys.__stderr__
unlink(TESTFN)
def test_main(): def test_main():
run_unittest(CProfileTest) run_unittest(CProfileTest)
......
...@@ -150,7 +150,7 @@ static PY_LONG_LONG CallExternalTimer(ProfilerObject *pObj) ...@@ -150,7 +150,7 @@ static PY_LONG_LONG CallExternalTimer(ProfilerObject *pObj)
} }
Py_DECREF(o); Py_DECREF(o);
if (PyErr_Occurred()) { if (PyErr_Occurred()) {
PyErr_WriteUnraisable((PyObject *) pObj); PyErr_WriteUnraisable(pObj->externalTimer);
return 0; return 0;
} }
return result; return result;
......
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