diff options
author | Georg Brandl <georg@python.org> | 2010-07-31 21:22:36 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2010-07-31 21:22:36 (GMT) |
commit | a491727ded210994812ae1191253c0305dfc6885 (patch) | |
tree | 2f2e74527acbfcda4586767358f300279a8b1933 /Lib | |
parent | 05f819b6e9b026ab454cf187269b145bd7ac1ed6 (diff) | |
download | cpython-a491727ded210994812ae1191253c0305dfc6885.zip cpython-a491727ded210994812ae1191253c0305dfc6885.tar.gz cpython-a491727ded210994812ae1191253c0305dfc6885.tar.bz2 |
#1019882: if start() and stop() were not in the same stack frame, stats.load() would crash with IndexError.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/hotshot/log.py | 5 | ||||
-rw-r--r-- | Lib/test/test_hotshot.py | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/Lib/hotshot/log.py b/Lib/hotshot/log.py index 47c932a..17e8b50 100644 --- a/Lib/hotshot/log.py +++ b/Lib/hotshot/log.py @@ -106,7 +106,10 @@ class LogReader: return what, t, tdelta if what == WHAT_EXIT: - return what, self._pop(), tdelta + try: + return what, self._pop(), tdelta + except IndexError: + raise StopIteration if what == WHAT_LINENO: filename, firstlineno, funcname = self._stack[-1] diff --git a/Lib/test/test_hotshot.py b/Lib/test/test_hotshot.py index c6dae36..7da9746 100644 --- a/Lib/test/test_hotshot.py +++ b/Lib/test/test_hotshot.py @@ -10,6 +10,7 @@ from test import test_support # Silence Py3k warning hotshot = test_support.import_module('hotshot', deprecated=True) from hotshot.log import ENTER, EXIT, LINE +from hotshot import stats def shortfilename(fn): @@ -136,6 +137,19 @@ class HotShotTestCase(unittest.TestCase): emptyfile.close() gc.collect() + def test_load_stats(self): + def start(prof): + prof.start() + # Make sure stats can be loaded when start and stop of profiler + # are not executed in the same stack frame. + profiler = self.new_profiler() + start(profiler) + profiler.stop() + profiler.close() + stats.load(self.logfn) + os.unlink(self.logfn) + + def test_main(): test_support.run_unittest(HotShotTestCase) |