> On 8 Jun 2018, at 12:36, Serhiy Storchaka <storch...@gmail.com> wrote:
> 
> 08.06.18 11:31, Victor Stinner пише:
>> Do you suggest to trigger a fake "GC collection" which would just
>> visit all objects with a no-op visit callback? I like the idea!
>> 
>> Yeah, that would help to detect objects in an inconsistent state and
>> reuse the existing implemented visit methods of all types.
>> 
>> Would you be interested to try to implement this new debug feature?
> 
> It is simple:
> 
> #ifdef Py_DEBUG
> void
> _PyGC_CheckConsistency(void)
> {
>     int i;
>     if (_PyRuntime.gc.collecting) {
>         return;
>     }
>     _PyRuntime.gc.collecting = 1;
>     for (i = 0; i < NUM_GENERATIONS; ++i) {
>         update_refs(GEN_HEAD(i));
>     }
>     for (i = 0; i < NUM_GENERATIONS; ++i) {
>         subtract_refs(GEN_HEAD(i));
>     }
>     for (i = 0; i < NUM_GENERATIONS; ++i) {
>         revive_garbage(GEN_HEAD(i));
>     }
>     _PyRuntime.gc.collecting = 0;
> }
> #endif

Wouldn’t it be enough to visit just the the newly tracked object in 
PyObject_GC_Track with a visitor function that does something minimal to verify 
that the object value is sane, for example by checking 
PyType_Ready(Py_TYPE(op)).

That would find issues where objects are tracked before they are initialised 
far enough to be save to visit, without changing GC behavior. I have no idea 
what the performance impact of this is though.

Ronald

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to