Python 3.12 segfault with mixin classes
Phil Thompson
phil at riverbankcomputing.com
Fri Jun 16 15:36:51 BST 2023
On 15/06/2023 19:03, Florian Bruhin 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:
>>
>> #0 [...] _PyDict_Next (op=0x0, [...])
>> [...]
>> #2 [...] in trawl_hierarchy([...])
>> from .../lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
>> [...]
>
> Eric Snow commented on the issue:
>
> Presumably the crashing code is trying to use the dict returned by
> sipPyTypeDict() and I'm guessing that that function basically
> returns
> pytype->tp_dict and that the pytype in question is a static builtin
> type. If that's the case then the failure makes sense since tp_dict
> for
> static builtin types is now NULL.
>
> And that indeed seems to be the case: trawl_type does
> "dict = sipPyTypeDict(pytype);", that is an alias to sip's
> api_py_type_dict, and that accesses py_type->tp_dict.
>
> See:
> https://github.com/python/cpython/issues/105227
>
> There is now an open PR to add a PyType_GetDict():
> https://github.com/python/cpython/pull/105747
Hopefully fixed in tonight's snapshot - although it needs the next beta
release of Python v3.12 to build.
Phil
More information about the PyQt
mailing list