From 8a21afc5658e4337571563cf574e9fef58c6683e Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Fri, 30 Dec 2016 12:30:09 -0500 Subject: 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. --- coverage/pytracer.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'coverage') 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 "".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) -- cgit v1.2.1