bpo-36820: Break unnecessary cycle in socket.py, codeop.py and dyld.py (GH-13135)

Break cycle generated when saving an exception in socket.py, codeop.py and dyld.py as they keep alive not only the exception but user objects through the ``__traceback__`` attribute.


https://bugs.python.org/issue36820



Automerge-Triggered-By: @pablogsal
This commit is contained in:
Mario Corchero 2019-12-06 14:27:38 +00:00 committed by Miss Islington (bot)
parent efefe25443
commit b64334cb93
4 changed files with 17 additions and 5 deletions

View file

@ -93,10 +93,13 @@ def _maybe_compile(compiler, source, filename, symbol):
except SyntaxError as e:
err2 = e
if code:
return code
if not code1 and repr(err1) == repr(err2):
raise err1
try:
if code:
return code
if not code1 and repr(err1) == repr(err2):
raise err1
finally:
err1 = err2 = None
def _compile(source, filename, symbol):
return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT)