]> granicus.if.org Git - python/commit
bpo-38379: Don't block collection of unreachable objects when some objects resurrect...
authorPablo Galindo <Pablogsal@gmail.com>
Sun, 13 Oct 2019 15:48:59 +0000 (16:48 +0100)
committerGitHub <noreply@github.com>
Sun, 13 Oct 2019 15:48:59 +0000 (16:48 +0100)
commit466326dcdf038b948d94302c315be407c73e60d1
treee19508731d6c91651ae58a85e8d3d00a09a39c99
parente3babbd03cd2bcb3c85deabae3bc6976aa95a3c3
bpo-38379: Don't block collection of unreachable objects when some objects resurrect (GH-16687)

Currently if any finalizer invoked during garbage collection resurrects any object, the gc gives up and aborts the collection. Although finalizers are assured to only run once per object, this behaviour of the gc can lead to an ever-increasing memory situation if new resurrecting objects are allocated in every new gc collection.

To avoid this, recompute what objects among the unreachable set need to be resurrected and what objects can be safely collected. In this way, resurrecting objects will not block the collection of other objects in the unreachable set.
Lib/test/test_gc.py
Misc/NEWS.d/next/Core and Builtins/2019-10-10-01-41-02.bpo-38379._q4dhn.rst [new file with mode: 0644]
Modules/gcmodule.c