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
Merged
pablogsal added a commit that referenced this pull request
…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 added a commit to jacobneiltaylor/cpython that referenced this pull request
…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.
miss-islington added a commit to miss-islington/cpython that referenced this pull request
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 to miss-islington/cpython that referenced this pull request
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>
Merged
miss-islington added a commit that referenced this pull request
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
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>