summaryrefslogtreecommitdiff
path: root/Lib/codeop.py
diff options
context:
space:
mode:
authorMario Corchero <mcorcherojim@bloomberg.net>2019-12-06 14:27:38 +0000
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-12-06 06:27:38 -0800
commitb64334cb93d0ddbb551c8cd712942bab2fc72772 (patch)
tree131741a192a23a07dcd4d7f45aa2a7bd95746238 /Lib/codeop.py
parentefefe25443c56988841ab96cdac01352123ba268 (diff)
downloadcpython-git-b64334cb93d0ddbb551c8cd712942bab2fc72772.tar.gz
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
Diffstat (limited to 'Lib/codeop.py')
-rw-r--r--Lib/codeop.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/Lib/codeop.py b/Lib/codeop.py
index fc7e1e70ce..082285f94f 100644
--- a/Lib/codeop.py
+++ b/Lib/codeop.py
@@ -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)