aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2021-10-26 17:27:27 +0200
committerChristian Tismer <tismer@stackless.com>2021-10-27 14:07:48 +0200
commit55eebea1a48cbf5c2caef5b89226ad5c1fb18971 (patch)
tree262139d549fe3303fd3f9d38a0c7b2371469c6ff
parent9399408fd1e7e12215389a5bf96ae5e4ec38905b (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.cpp18
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.
*/