Skip to content

Commit

Permalink
Turn off sys.monitoring hooks for tests marked with @no_tracing
Browse files Browse the repository at this point in the history
  • Loading branch information
ambv committed Nov 6, 2023
1 parent 1adbf57 commit d4f5b6b
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1082,18 +1082,30 @@ def check_impl_detail(**guards):

def no_tracing(func):
"""Decorator to temporarily turn off tracing for the duration of a test."""
if not hasattr(sys, 'gettrace'):
return func
else:
trace_wrapper = func
if hasattr(sys, 'gettrace'):
@functools.wraps(func)
def trace_wrapper(*args, **kwargs):
original_trace = sys.gettrace()
try:
sys.settrace(None)
return func(*args, **kwargs)
finally:
sys.settrace(original_trace)

coverage_wrapper = trace_wrapper
if 'test.cov' in sys.modules: # -Xpresite=test.cov used
cov = sys.monitoring.COVERAGE_ID
@functools.wraps(func)
def wrapper(*args, **kwargs):
original_trace = sys.gettrace()
def coverage_wrapper(*args, **kwargs):
original_events = sys.monitoring.get_events(cov)
try:
sys.settrace(None)
return func(*args, **kwargs)
sys.monitoring.set_events(cov, 0)
return trace_wrapper(*args, **kwargs)
finally:
sys.settrace(original_trace)
return wrapper
sys.monitoring.set_events(cov, original_events)

return coverage_wrapper


def refcount_test(test):
Expand Down

0 comments on commit d4f5b6b

Please sign in to comment.