bpo-36820: Break unnecessary cycle in socket.py, codeop.py and dyld.py by mariocj89 · Pull Request #13135 · python/cpython

@matrixise matrixise changed the title bpo-36820: Break unnecesary cycle in socket.py, codeop.py and dyld.py bpo-36820: Break unnecessary cycle in socket.py, codeop.py and dyld.py

May 6, 2019

pablogsal added a commit that referenced this pull request

Nov 19, 2019
…nces of creating cycles (GH-17246)

Capturing exceptions into names can lead to reference cycles though the __traceback__ attribute of the exceptions in some obscure cases that have been reported previously and fixed individually. As these variables are not used anyway, we can remove the binding to reduce the chances of creating reference cycles.

See for example GH-13135

jacobneiltaylor pushed a commit to jacobneiltaylor/cpython that referenced this pull request

Dec 5, 2019
…nces of creating cycles (pythonGH-17246)

Capturing exceptions into names can lead to reference cycles though the __traceback__ attribute of the exceptions in some obscure cases that have been reported previously and fixed individually. As these variables are not used anyway, we can remove the binding to reduce the chances of creating reference cycles.

See for example pythonGH-13135
The cycle happens when an exception is raised in
`socket.create_connection` as it saves the exception in a variable and
then re-raise it. By removing the name when the exception is raised we
remove this cycle. We cannot just remove the name before as in the happy
path since we need the exception to be raised.
As the exceptions were being saved in a different name it was
generating a cycle since it was own through the `__traceback__`.
By unsetting them we can collect the object earlier without the need of
waiting for the gc.
As the exceptions were being saved in a different name it was
generating a cycle since it was own through the `__traceback__`.
By unsetting them we can collect the object earlier without the need of
waiting for the gc.

@mariocj89

@mariocj89

pablogsal

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request

Dec 6, 2019
pythonGH-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
(cherry picked from commit b64334c)

Co-authored-by: Mario Corchero <mcorcherojim@bloomberg.net>

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request

Dec 6, 2019
pythonGH-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
(cherry picked from commit b64334c)

Co-authored-by: Mario Corchero <mcorcherojim@bloomberg.net>

miss-islington added a commit that referenced this pull request

Dec 6, 2019
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
(cherry picked from commit b64334c)

Co-authored-by: Mario Corchero <mcorcherojim@bloomberg.net>

miss-islington added a commit that referenced this pull request

Dec 6, 2019
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
(cherry picked from commit b64334c)

Co-authored-by: Mario Corchero <mcorcherojim@bloomberg.net>

shihai1991 pushed a commit to shihai1991/cpython that referenced this pull request

Jan 31, 2020
…nces of creating cycles (pythonGH-17246)

Capturing exceptions into names can lead to reference cycles though the __traceback__ attribute of the exceptions in some obscure cases that have been reported previously and fixed individually. As these variables are not used anyway, we can remove the binding to reduce the chances of creating reference cycles.

See for example pythonGH-13135

shihai1991 pushed a commit to shihai1991/cpython that referenced this pull request

Jan 31, 2020