[3.9] gh-108342: Break ref cycle in SSLSocket._create() exc (GH-108344) (#108351)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 23 Aug 2023 10:10:49 +0000 (03:10 -0700)
committerAdrian Bunk <bunk@debian.org>
Sun, 1 Dec 2024 12:12:57 +0000 (14:12 +0200)
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>
Gbp-Pq: Name 0017-3.9-gh-108342-Break-ref-cycle-in-SSLSocket._create-e.patch

Lib/ssl.py

index 2565e7fd3511331ff30e8ee014c70ac8dc192b2c..3270d9a8645f35d8e1097297dbdb4c7bfc9897ad 100644 (file)
@@ -1048,7 +1048,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