mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
visit_reachable: replace release-mode test with an assert. (GH-16866)
It should be impossible for an untracked object to have the collecting flag set. Back when state was stored in gc_refs, it obviously was impossible (gc_refs couldn't possibly have a positive & negative value simultaneously). While the _implementation_ of "state" has gotten much more complicated, it's still _logically_ just as impossible.
This commit is contained in:
parent
5bc6a7c06e
commit
1e73945470
1 changed files with 5 additions and 2 deletions
|
@ -468,13 +468,16 @@ visit_reachable(PyObject *op, PyGC_Head *reachable)
|
|||
PyGC_Head *gc = AS_GC(op);
|
||||
const Py_ssize_t gc_refs = gc_get_refs(gc);
|
||||
|
||||
// Ignore untracked objects and objects in other generation.
|
||||
// Ignore objects in other generation.
|
||||
// This also skips objects "to the left" of the current position in
|
||||
// move_unreachable's scan of the 'young' list - they've already been
|
||||
// traversed, and no longer have the PREV_MASK_COLLECTING flag.
|
||||
if (gc->_gc_next == 0 || !gc_is_collecting(gc)) {
|
||||
if (! gc_is_collecting(gc)) {
|
||||
return 0;
|
||||
}
|
||||
// It would be a logic error elsewhere if the collecting flag were set on
|
||||
// an untracked object.
|
||||
assert(gc->_gc_next != 0);
|
||||
|
||||
if (gc->_gc_next & NEXT_MASK_UNREACHABLE) {
|
||||
/* This had gc_refs = 0 when move_unreachable got
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue