diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2016-12-30 12:30:09 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2016-12-30 12:30:09 -0500 |
commit | 8a21afc5658e4337571563cf574e9fef58c6683e (patch) | |
tree | ab689b2d470bbd9cf85a61461b84b3690d3214bb /coverage/pytracer.py | |
parent | 179db49d02eaa4d92d367000170e7fd70bf816d3 (diff) | |
download | python-coveragepy-8a21afc5658e4337571563cf574e9fef58c6683e.tar.gz |
Don't warn about trace=None on PyPy at shutdown
PyPy clears the trace function before calling atexit functions. So when we
check if the trace function is changed, don't warn in that specific case.
Diffstat (limited to 'coverage/pytracer.py')
-rw-r--r-- | coverage/pytracer.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 23f4946..13a3b0c 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -3,6 +3,7 @@ """Raw data collector for coverage.py.""" +import atexit import dis import sys @@ -52,6 +53,10 @@ class PyTracer(object): self.thread = None self.stopped = False + self.in_atexit = False + # On exit, self.in_atexit = True + atexit.register(setattr, self, 'in_atexit', True) + def __repr__(self): return "<PyTracer at 0x{0:0x}: {1} lines in {2} files>".format( id(self), @@ -144,9 +149,13 @@ class PyTracer(object): return if self.warn: - if sys.gettrace() != self._trace: - msg = "Trace function changed, measurement is likely wrong: %r" - self.warn(msg % (sys.gettrace(),)) + # PyPy clears the trace function before running atexit functions, + # so don't warn if we are in atexit on PyPy and the trace function + # has changed to None. + tf = sys.gettrace() + dont_warn = (env.PYPY and self.in_atexit and tf is None) + if (not dont_warn) and tf != self._trace: + self.warn("Trace function changed, measurement is likely wrong: %r" % (tf,)) sys.settrace(None) |