SIP gc assert
Phil Thompson
phil at riverbankcomputing.com
Wed Apr 12 14:15:16 BST 2023
On 12/04/2023 00:09, Mark Roszko wrote:
> We are finding that the generated descriptors.c that comes
> from sip_descriptors.c is causing crash asserts in python 3.11. One
> notable reason is python 3.11 introduced asserts in various places to
> stay on top of object lifetime
>
> The assert looks like this
>
>> gcmodule.c:442: update_refs: Assertion "gc_get_refs(gc) != 0" failed
>> Enable tracemalloc to get the memory block allocation traceback
>
>> object address : 000002C59FF0EF80
>> object refcount : 0
>> object type : 00007FFC02AA71C0
>> object type name: sip.methoddescriptor
>> object repr : <refcnt 0 at 000002C59FF0EF80>
>
>> Fatal Python error: _PyObject_AssertFailed: _PyObject_AssertFailed
>> Python runtime state: initialized
>
> After research, both sipMethodDescr_Type and sipVariableDescr_Type
> have the Py_TPFLAGS_HAVE_GC flag set.
>
> Per the python 3.11 manual for the HAVE_GC flag. The function
> PyObject_GC_UnTrack should be called first in the dealloc slot
> function before doing anything else
>
> Adding the PyObject_GC_UnTrack calls appears to fix the assert for us
Should be fixed in the next snapshot.
Thanks,
Phil
More information about the PyQt
mailing list