From 657efca298bac3a4fcc66e917a464e4a6764f0d3 Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
 <31488909+miss-islington@users.noreply.github.com>
Date: Wed, 27 Jul 2022 05:28:26 -0700
Subject: [PATCH] GH-95045: gc untrack _lsprof.Profiler before deallocating it
 (GH-95315)

Automerge-Triggered-By: GH:pablogsal
(cherry picked from commit deacf391d7a1b3ab49bffa16088b3500fdb4c435)

Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
---
 .../next/Library/2022-07-27-11-35-45.gh-issue-95045.iysT-Q.rst   | 1 +
 Modules/_lsprof.c                                                | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 Misc/NEWS.d/next/Library/2022-07-27-11-35-45.gh-issue-95045.iysT-Q.rst

diff --git a/Misc/NEWS.d/next/Library/2022-07-27-11-35-45.gh-issue-95045.iysT-Q.rst b/Misc/NEWS.d/next/Library/2022-07-27-11-35-45.gh-issue-95045.iysT-Q.rst
new file mode 100644
index 00000000000..d4ab325e036
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-07-27-11-35-45.gh-issue-95045.iysT-Q.rst
@@ -0,0 +1 @@
+Fix GC crash when deallocating ``_lsprof.Profiler`` by untracking it before calling any callbacks. Patch by Kumar Aditya.
diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c
index 8d754aa7e3c..0a6b29a969b 100644
--- a/Modules/_lsprof.c
+++ b/Modules/_lsprof.c
@@ -741,6 +741,7 @@ profiler_traverse(ProfilerObject *op, visitproc visit, void *arg)
 static void
 profiler_dealloc(ProfilerObject *op)
 {
+    PyObject_GC_UnTrack(op);
     if (op->flags & POF_ENABLED) {
         PyThreadState *tstate = PyThreadState_GET();
         if (_PyEval_SetProfile(tstate, NULL, NULL) < 0) {
-- 
GitLab