diff options
| author | Christian Tismer <tismer@stackless.com> | 2021-10-26 17:27:27 +0200 |
|---|---|---|
| committer | Christian Tismer <tismer@stackless.com> | 2021-10-27 14:07:48 +0200 |
| commit | 55eebea1a48cbf5c2caef5b89226ad5c1fb18971 (patch) | |
| tree | 262139d549fe3303fd3f9d38a0c7b2371469c6ff | |
| parent | 9399408fd1e7e12215389a5bf96ae5e4ec38905b (diff) | |
PyPySide: circumvent an lldebug regression
When building PyPy with lldebug or lldebug0 selected a
a build option, there is a regression in the signature
module that crashes every build
This crash is a confirmed PyPy bug with global
dictionaries that occurs sometime and is hard to fix
on the PyPy side.
The workaround is to skip signature initialization in
such a PyPy debug build.
Task-number: PYSIDE-535
Change-Id: I9977e5ff82759bfd882d55785528dd276012e047
Pick-to: 6.2
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
| -rw-r--r-- | sources/shiboken6/libshiboken/signature/signature.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sources/shiboken6/libshiboken/signature/signature.cpp b/sources/shiboken6/libshiboken/signature/signature.cpp index 2894dbace..d6d99ec2c 100644 --- a/sources/shiboken6/libshiboken/signature/signature.cpp +++ b/sources/shiboken6/libshiboken/signature/signature.cpp @@ -382,8 +382,26 @@ PyObject *PySide_BuildSignatureProps(PyObject *type_key) // //////////////////////////////////////////////////////////////////////////// +#ifdef PYPY_VERSION +static bool get_lldebug_flag() +{ + PyObject *sysmodule = PyImport_AddModule("sys"); + auto *dic = PyModule_GetDict(sysmodule); + dic = PyDict_GetItemString(dic, "pypy_translation_info"); + int lldebug = PyObject_IsTrue(PyDict_GetItemString(dic, "translation.lldebug")); + int lldebug0 = PyObject_IsTrue(PyDict_GetItemString(dic, "translation.lldebug0")); + return lldebug || lldebug0; +} + +#endif + static int PySide_FinishSignatures(PyObject *module, const char *signatures[]) { +#ifdef PYPY_VERSION + static bool have_problem = get_lldebug_flag(); + if (have_problem) + return 0; // crash with lldebug at `PyDict_Next` +#endif /* * Initialization of module functions and resolving of static methods. */ |
