diff options
author | Tim Peters <tim.peters@gmail.com> | 2006-03-07 23:53:32 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2006-03-07 23:53:32 (GMT) |
commit | df44ab7b1cfb97b29712f40db422f27b2d8d1838 (patch) | |
tree | 0c564fe1d04c4d95733766167aa3ab603b06ab2f | |
parent | 516999e6e2b1d89bc29a8930d651e4cddf968bfe (diff) | |
download | cpython-df44ab7b1cfb97b29712f40db422f27b2d8d1838.zip cpython-df44ab7b1cfb97b29712f40db422f27b2d8d1838.tar.gz cpython-df44ab7b1cfb97b29712f40db422f27b2d8d1838.tar.bz2 |
_hotshot hotshot_profiler(): If write_header() returned
an error code, this let `self` leak. This is a disaster
on Windows, since `self` already points to a newly-opened
file object, and it was impossible for Python code to
close the thing since the only reference to it was in a
blob of leaked C memory.
test_hotshot test_bad_sys_path(): This new test provoked
the C bug above. This test passed, but left an open
"@test" file behind, which caused a massive cascade of
bogus test failures in later, unrelated tests on Windows.
Changed the test code to remove the @test file it leaves
behind, which relies on the change above to close that
file first.
-rw-r--r-- | Lib/test/test_hotshot.py | 5 | ||||
-rw-r--r-- | Modules/_hotshot.c | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/Lib/test/test_hotshot.py b/Lib/test/test_hotshot.py index 4618439..2751b3f 100644 --- a/Lib/test/test_hotshot.py +++ b/Lib/test/test_hotshot.py @@ -109,17 +109,20 @@ class HotShotTestCase(unittest.TestCase): def test_bad_sys_path(self): import sys + import os orig_path = sys.path coverage = hotshot._hotshot.coverage try: # verify we require a list for sys.path sys.path = 'abc' self.assertRaises(RuntimeError, coverage, test_support.TESTFN) - # verify sys.path exists + # verify that we require sys.path exists del sys.path self.assertRaises(RuntimeError, coverage, test_support.TESTFN) finally: sys.path = orig_path + if os.path.exists(test_support.TESTFN): + os.remove(test_support.TESTFN) def test_main(): test_support.run_unittest(HotShotTestCase) diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c index 64dfa91..d5b4cde 100644 --- a/Modules/_hotshot.c +++ b/Modules/_hotshot.c @@ -1525,9 +1525,11 @@ hotshot_profiler(PyObject *unused, PyObject *args) calibrate(); calibrate(); } - if (write_header(self)) + if (write_header(self)) { /* some error occurred, exception has been set */ + Py_DECREF(self); self = NULL; + } } return (PyObject *) self; } |