From: "Miss Islington (bot)"
 <31488909+miss-islington@users.noreply.github.com>
Date: Wed, 23 Aug 2023 03:10:04 -0700
Subject: gh-108342: Break ref cycle in SSLSocket._create() exc (GH-108344)
 (#108351)

Explicitly break a reference cycle when SSLSocket._create() raises an
exception. Clear the variable storing the exception, since the
exception traceback contains the variables and so creates a reference
cycle.

This test leak was introduced by the test added for the fix of GH-108310.
(cherry picked from commit 64f99350351bc46e016b2286f36ba7cd669b79e3)

Co-authored-by: Victor Stinner <vstinner@python.org>

Origin: cpython, https://github.com/python/cpython/commit/b8058b3da542101f4a227ef2d6a263a5d73d7973
Bug-cpython: https://github.com/python/cpython/issues/108342
---
 lib-python/3/ssl.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib-python/3/ssl.py b/lib-python/3/ssl.py
index c445003..2e6bdfd 100644
--- a/lib-python/3/ssl.py
+++ b/lib-python/3/ssl.py
@@ -1049,7 +1049,11 @@ class SSLSocket(socket):
                     self.close()
                 except OSError:
                     pass
-                raise notconn_pre_handshake_data_error
+                try:
+                    raise notconn_pre_handshake_data_error
+                finally:
+                    # Explicitly break the reference cycle.
+                    notconn_pre_handshake_data_error = None
         else:
             connected = True
 
