Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Turn off sys.monitoring hooks for tests marked with @no_tracing
  • Loading branch information
ambv committed Nov 6, 2023
commit d4f5b6bbd6870d012ed7eac2faa103dd5a2ec40d
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