aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/signalmanager.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-09-26 09:31:47 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-09-30 10:12:07 +0200
commit5d7bdfcd5c9e3748a041a9bd4069937adaf89129 (patch)
treec875f5112c54721c8d36e9e3af99f39f336d8a01 /sources/pyside6/libpyside/signalmanager.cpp
parent8464c8af6541d07dea3c9552071209585925985b (diff)
libpyside/signalmanager: Change metaObjectAttr to be an immortal string
Pick-to: 6.10 Task-number: PYSIDE-3155 Change-Id: I808bd38b57650bb5a4f6933fbc00aa3086279693 Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/signalmanager.cpp')
-rw-r--r--sources/pyside6/libpyside/signalmanager.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp
index d08fb56bf..8fcb2aca7 100644
--- a/sources/pyside6/libpyside/signalmanager.cpp
+++ b/sources/pyside6/libpyside/signalmanager.cpp
@@ -38,7 +38,11 @@ using namespace Qt::StringLiterals;
#error QSLOT_CODE and/or QSIGNAL_CODE changed! change the hardcoded stuff to the correct value!
#endif
-static PyObject *metaObjectAttr = nullptr;
+PyObject *metaObjectAttr()
+{
+ static PyObject *const s = Shiboken::String::createStaticString("__METAOBJECT__");
+ return s;
+}
static int pyObjectWrapperMetaTypeId = QMetaType::UnknownType;
@@ -309,9 +313,6 @@ void SignalManager::init()
Shiboken::Conversions::registerConverterName(converter, "object");
Shiboken::Conversions::registerConverterName(converter, "PyObjectWrapper");
Shiboken::Conversions::registerConverterName(converter, "PySide::PyObjectWrapper");
-
- if (!metaObjectAttr)
- metaObjectAttr = Shiboken::String::fromCString("__METAOBJECT__");
}
void SignalManager::setQmlMetaCallErrorHandler(QmlMetaCallErrorHandler handler)
@@ -620,13 +621,13 @@ static MetaObjectBuilder *metaBuilderFromDict(PyObject *dict)
// no GIL.
// Note that "SignalManager::registerMetaMethodGetIndex" has write actions
// that might involve the interpreter, but in that context the GIL is held.
- if (!dict || !PyDict_Contains(dict, metaObjectAttr))
+ if (!dict || !PyDict_Contains(dict, metaObjectAttr()))
return nullptr;
// PYSIDE-813: The above assumption is not true in debug mode:
// PyDict_GetItem would touch PyThreadState_GET and the global error state.
// PyDict_GetItemWithError instead can work without GIL.
- PyObject *pyBuilder = PyDict_GetItemWithError(dict, metaObjectAttr);
+ PyObject *pyBuilder = PyDict_GetItemWithError(dict, metaObjectAttr());
return reinterpret_cast<MetaObjectBuilder *>(PyCapsule_GetPointer(pyBuilder, nullptr));
}
@@ -700,7 +701,7 @@ static int addMetaMethod(QObject *source, const QByteArray &signature,
if (dmo == nullptr) {
dmo = new MetaObjectBuilder(Py_TYPE(pySelf), metaObject);
PyObject *pyDmo = PyCapsule_New(dmo, nullptr, destroyMetaObject);
- PyObject_SetAttr(pySelf, metaObjectAttr, pyDmo);
+ PyObject_SetAttr(pySelf, metaObjectAttr(), pyDmo);
Py_DECREF(pyDmo);
}