> Modules dicts are cleared during interpreter shutdown to break
such cycles.

That is precisely what's not working because of the cycles, check the first
message in the issue:

https://bugs.python.org/msg385297

> Also: Why are types mutable ? AFAIK, they are only meant to be
mutable at C level and then only until they are fully initialized
(PyType_Ready() called).

Check https://bugs.python.org/issue43916



On Thu, 27 May 2021 at 19:38, Marc-Andre Lemburg <m...@egenix.com> wrote:

> On 27.05.2021 20:20, Pablo Galindo Salgado wrote:
> >> And if a type pointer is the only thing being visited, then there's
> > no point unless the object can itself be reachable from the type object.
> >
> > But that could happen easily for heap types as they are mutable by
> default. For
> > instance, you set the instance in a global:
> >
> > type -> module -> globals -> instance -> type
>
> Modules dicts are cleared during interpreter shutdown to break
> such cycles. You would not really want to use GC to clear
> type objects: if you GC the type object before the instance,
> this would create really difficult to handle situations :-)
>
> Also: Why are types mutable ? AFAIK, they are only meant to be
> mutable at C level and then only until they are fully initialized
> (PyType_Ready() called).
>
> > On Thu, 27 May 2021, 19:07 Tim Peters, <tim.pet...@gmail.com
> > <mailto:tim.pet...@gmail.com>> wrote:
> >
> >     [Tim Peters <tim.pet...@gmail.com <mailto:tim.pet...@gmail.com>>]
> >     > ...
> >     > This is, I believe, akin to what Marc-Andre is bringing up:  if X
> >     > can't be reached _from_ X's type object, there's no need for X's
> >     > tp_traverse to visit X's type object.  It _can_ be visited, but it
> >     > would be a waste of time.
> >
> >     Ya, I need to retract that :-)  If X's type object is in a cycle not
> >     directly containing X, and X is in a cycle not directly containing
> its
> >     type object, and both cycles are dead, then X's tp_traverse must
> visit
> >     X's type object for cyclic gc to deduce that the cycle directly
> >     containing the type object _is_ dead.
> >
> >     Else only the cycle containing X will be reclaimed, and the cycle
> >     containing the type object will have to wait for another gc run.
> >
> >     But that doesn't apply to some of the patches we're seeing. We're
> >     seeing visits to things that can't possibly be parts of cycles:
> >
> >     +static int
> >     +pattern_traverse(PatternObject *self, visitproc visit, void *arg)
> >     +{
> >     +    Py_VISIT(Py_TYPE(self));
> >     +    Py_VISIT(self->groupindex);
> >     +    Py_VISIT(self->indexgroup);
> >     +    Py_VISIT(self->pattern);
> >     +    return 0;
> >     +}
> >     +
> >
> >     For example, self->pattern there is a string.  For that matter, it's
> >     hard to conceive of how a regexp pattern object could possibly be a
> >     direct member of any cycle.
> >
> >     And if a type pointer is the only thing being visited, then there's
> no
> >     point unless the object can itself be reachable from the type object.
> >
>
> --
> Marc-Andre Lemburg
> eGenix.com
>
> Professional Python Services directly from the Experts (#1, May 27 2021)
> >>> Python Projects, Coaching and Support ...    https://www.egenix.com/
> >>> Python Product Development ...        https://consulting.egenix.com/
> ________________________________________________________________________
>
> ::: We implement business ideas - efficiently in both time and costs :::
>
>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>            Registered at Amtsgericht Duesseldorf: HRB 46611
>                https://www.egenix.com/company/contact/
>                      https://www.malemburg.com/
>
>
_______________________________________________
python-committers mailing list -- python-committers@python.org
To unsubscribe send an email to python-committers-le...@python.org
https://mail.python.org/mailman3/lists/python-committers.python.org/
Message archived at 
https://mail.python.org/archives/list/python-committers@python.org/message/YDE6JKMGXKQU7WKMJFHUDRAMY7K3C5V7/
Code of Conduct: https://www.python.org/psf/codeofconduct/

Reply via email to