Skip to content

Commit

Permalink
bpo-36820: Break unnecessary cycle in socket.py, codeop.py and dyld.py (
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mariocj89 authored and miss-islington committed Dec 6, 2019
1 parent efefe25 commit b64334c
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
11 changes: 7 additions & 4 deletions Lib/codeop.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions Lib/ctypes/macholib/dyld.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ def framework_find(fn, executable_path=None, env=None):
return dyld_find(fn, executable_path=executable_path, env=env)
except ValueError:
raise error
finally:
error = None

def test_dyld_find():
env = {}
Expand Down
6 changes: 5 additions & 1 deletion Lib/socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -839,7 +839,11 @@ def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
sock.close()

if err is not None:
raise err
try:
raise err
finally:
# Break explicitly a reference cycle
err = None
else:
raise error("getaddrinfo returns an empty list")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
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. Patch by Mario Corchero.

0 comments on commit b64334c

Please sign in to comment.