summaryrefslogtreecommitdiff
path: root/coverage/pytracer.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2017-01-02 11:12:33 -0500
committerNed Batchelder <ned@nedbatchelder.com>2017-01-02 11:12:33 -0500
commit88625f54ebe9e7f9c14f58157ac0427e673a8d29 (patch)
tree58a373d3fdee7fd0068547cba203b02b11aa9222 /coverage/pytracer.py
parent09959710937f44105f052267bddc948079e5e32c (diff)
downloadpython-coveragepy-git-88625f54ebe9e7f9c14f58157ac0427e673a8d29.tar.gz
When nesting tracers, don't restart on the wrong thread
Diffstat (limited to 'coverage/pytracer.py')
-rw-r--r--coverage/pytracer.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/coverage/pytracer.py b/coverage/pytracer.py
index 6cd3ea30..5a1b5d7b 100644
--- a/coverage/pytracer.py
+++ b/coverage/pytracer.py
@@ -58,7 +58,7 @@ class PyTracer(object):
atexit.register(setattr, self, 'in_atexit', True)
def __repr__(self):
- return "<PyTracer at 0x{0:0x}: {1} lines in {2} files>".format(
+ return "<PyTracer at {0}: {1} lines in {2} files>".format(
id(self),
sum(len(v) for v in self.data.values()),
len(self.data),
@@ -133,10 +133,18 @@ class PyTracer(object):
Return a Python function suitable for use with sys.settrace().
"""
+ self.stopped = False
if self.threading:
- self.thread = self.threading.currentThread()
+ if self.thread is None:
+ self.thread = self.threading.currentThread()
+ else:
+ if self.thread.ident != self.threading.currentThread().ident:
+ # Re-starting from a different thread!? Don't set the trace
+ # function, but we are marked as running again, so maybe it
+ # will be ok?
+ return self._trace
+
sys.settrace(self._trace)
- self.stopped = False
return self._trace
def stop(self):