summaryrefslogtreecommitdiffstats
path: root/Lib/test/_test_monitoring_shutdown.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/_test_monitoring_shutdown.py')
-rw-r--r--Lib/test/_test_monitoring_shutdown.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/_test_monitoring_shutdown.py b/Lib/test/_test_monitoring_shutdown.py
new file mode 100644
index 0000000..3d0fbec
--- /dev/null
+++ b/Lib/test/_test_monitoring_shutdown.py
@@ -0,0 +1,30 @@
+#!/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())