Python 3.12 segfault with mixin classes

Thomas Caswell tcaswell at gmail.com
Thu Jun 8 22:56:34 BST 2023


I am also seeing segfaults with the cpython main branch + pyqt6.  I had a
suspicion it was that change, but had not had time to verify or make a
minimal example (making a Matplotlib figure segfaulted).

numpy and cython also had issues, see
https://github.com/python/cpython/issues/104614 , however even with those
PRs landed I'm still seeing segfaults with PyQt6.

Tom

On Thu, Jun 8, 2023 at 5:22 PM Florian Bruhin <me at the-compiler.org> wrote:

> Hey,
>
> When trying PyQt 6.5.1 with Python 3.12 Beta 2, something like:
>
>         import sys
>         from PyQt6.QtWidgets import QWidget, QApplication
>
>         class Mixin: pass
>         class Command(Mixin, QWidget): pass
>
>         app = QApplication(sys.argv)
>         cmd = Command()
>         cmd.show()
>         app.exec()
>
> segfaults here on the "cmd.Command()" line:
>
>         _PyDict_Next (op=0x0, ppos=0x7fffffffbd50, pkey=0x7fffffffbd58,
> pvalue=0x7fffffffbd60, phash=phash at entry=0x0) at Objects/dictobject.c:2114
>         2114       if (!PyDict_Check(op))
>         (gdb) bt
>         #0  _PyDict_Next (op=0x0, ppos=0x7fffffffbd50, pkey=0x7fffffffbd58,
> pvalue=0x7fffffffbd60, phash=phash at entry=0x0) at Objects/dictobject.c:2114
>         #1  0x000055555572a37e in PyDict_Next (op=<optimized out>,
> ppos=<optimized out>, pkey=<optimized out>, pvalue=<optimized out>) at
> Objects/dictobject.c:2189
>         #2  0x00007ffff2436499 in trawl_hierarchy(_typeobject*,
> qpycore_metaobject*, QMetaObjectBuilder&, QList<EnumFlag>&,
> QList<_qpycore_pyqtSignal const*>&, QMap<unsigned int, std::pair<_object*,
> _object*> >&) ()
>            from .../lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
>         #3  0x00007ffff2436cc7 in trawl_hierarchy(_typeobject*,
> qpycore_metaobject*, QMetaObjectBuilder&, QList<EnumFlag>&,
> QList<_qpycore_pyqtSignal const*>&, QMap<unsigned int, std::pair<_object*,
> _object*> >&) ()
>            from .../lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
>         #4  0x00007ffff2436cc7 in trawl_hierarchy(_typeobject*,
> qpycore_metaobject*, QMetaObjectBuilder&, QList<EnumFlag>&,
> QList<_qpycore_pyqtSignal const*>&, QMap<unsigned int, std::pair<_object*,
> _object*> >&) ()
>            from .../lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
>         #5  0x00007ffff24357ba in
> qpycore_get_dynamic_metaobject(_sipWrapperType*) [clone .part.0] () from
> .../lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
>         #6  0x00007ffff24363d8 in qpycore_get_qmetaobject(_sipWrapperType*,
> _sipTypeDef const*) () from .../lib/python3.12/site-
> packages/PyQt6/QtCore.abi3.so
>         #7  0x00007ffff242a4e5 in qpycore_qobject_finalisation(_object*,
> QObject*, _object*, _object**) () from .../lib/python3.12/site-
> packages/PyQt6/QtCore.abi3.so
>         #8  0x00007ffff74efbbc in sipSimpleWrapper_init
> (self=0x7ffff765ebb0,
> args=(), kwds=0x0) at sip_core.c:8950
>         #9  0x0000555555758f0d in type_call (type=<optimized out>,
> type at entry=0x555555e53e60, args=args at entry=(), kwds=kwds at entry=0x0) at
> Objects/typeobject.c:1671
>         [...]
>
> (Note the op=0x0).
>
> I tried to build a debug PyQt, but it couldn't find Python.h of my
> (non-systemwide) debug Python, and I couldn't find a way to make
> sip-install
> pass a custom -I to gcc.
>
> I was able to bisect it in CPython to this commit:
>
> https://github.com/python/cpython/commit/de64e7561680fdc5358001e9488091e75d417
> 4a3
> <https://github.com/python/cpython/commit/de64e7561680fdc5358001e9488091e75d4174a3>
> which moves tp_dict/tp_bases/tp_mro to PyInterpreterState.
>
> I lack the context to tell more about what's happening here.
> Is this a CPython bug? If so, is there any chance of reproducing it without
> PyQt involved?
>
> Thanks,
>
> Florian
>


-- 
Thomas Caswell
tcaswell at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20230608/322f7294/attachment-0001.htm>


More information about the PyQt mailing list