Files
RustPython/Lib/test/_test_monitoring_shutdown.py
youknowdot efa8c26929 Align code introspection and monitoring with Python 3.15 (#9178)
* Align code metadata and monitoring event semantics with Python 3.15

Preserve canonical qualified-name interning and subclass values, normalize valid debug-range tables, and correct event-specific monitoring disable and callback ownership boundaries.

Assisted-by: OpenAI Codex:model version unavailable

* Import canonical monitoring shutdown helper

Copy the missing test_monitoring dependency from pinned CPython 3.15.0 through scripts/update_lib, retaining existing suite guards.

Assisted-by: OpenAI Codex:model version unavailable

* Match observed monitoring source layers and tool release ordering

Model active source instrumentation across all subscribed tools instead of unconditional legacy edge pairing. Preserve tool names during unlocked callback finalization before releasing them.

Assisted-by: OpenAI Codex:model version unavailable

* Preserve code qualnames and monitoring event-site identity

Retain decoded WTF8 qualnames, use exact-str marshal dispatch, and model wrapped branch dispatch with physical DISABLE sites. Retire the proven monitoring shutdown guard through update_lib.

Assisted-by: OpenAI Codex:model version unavailable
2026-10-18 10:57:23 +09:00

31 lines
727 B
Python
Vendored

#!/usr/bin/env python3
# gh-115832: An object destructor running during the final GC of interpreter
# shutdown triggered an infinite loop in the instrumentation code.
import sys
class CallableCycle:
def __init__(self):
self._cycle = self
def __del__(self):
pass
def __call__(self, code, instruction_offset):
pass
def tracefunc(frame, event, arg):
pass
def main():
tool_id = sys.monitoring.PROFILER_ID
event_id = sys.monitoring.events.PY_START
sys.monitoring.use_tool_id(tool_id, "test profiler")
sys.monitoring.set_events(tool_id, event_id)
sys.monitoring.register_callback(tool_id, event_id, CallableCycle())
if __name__ == "__main__":
sys.exit(main())