aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside6/libpyside')
-rw-r--r--sources/pyside6/libpyside/dynamicslot.cpp8
-rw-r--r--sources/pyside6/libpyside/signalmanager.cpp4
-rw-r--r--sources/pyside6/libpyside/signalmanager.h1
3 files changed, 13 insertions, 0 deletions
diff --git a/sources/pyside6/libpyside/dynamicslot.cpp b/sources/pyside6/libpyside/dynamicslot.cpp
index ce8ed191c..1fbdba1ab 100644
--- a/sources/pyside6/libpyside/dynamicslot.cpp
+++ b/sources/pyside6/libpyside/dynamicslot.cpp
@@ -65,6 +65,10 @@ void CallbackDynamicSlot::call(const QByteArrayList &parameterTypes, const char
void **cppArgs)
{
SignalManager::callPythonMetaMethod(parameterTypes, returnType, cppArgs, m_callback);
+ // SignalManager::callPythonMetaMethod might have failed, in that case we have to print the
+ // error so it considered "handled".
+ if (PyErr_Occurred() != nullptr)
+ SignalManager::handleMetaCallError();
}
void CallbackDynamicSlot::formatDebug(QDebug &debug) const
@@ -116,6 +120,10 @@ void MethodDynamicSlot::call(const QByteArrayList &parameterTypes, const char *r
m_pythonSelf, nullptr));
SignalManager::callPythonMetaMethod(parameterTypes, returnType,
cppArgs, callable.object());
+ // SignalManager::callPythonMetaMethod might have failed, in that case we have to print the
+ // error so it considered "handled".
+ if (PyErr_Occurred() != nullptr)
+ SignalManager::handleMetaCallError();
}
void MethodDynamicSlot::formatDebug(QDebug &debug) const
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp
index 35116648b..c3d66f3bc 100644
--- a/sources/pyside6/libpyside/signalmanager.cpp
+++ b/sources/pyside6/libpyside/signalmanager.cpp
@@ -300,7 +300,11 @@ void SignalManagerPrivate::handleMetaCallError(QObject *object, int *result)
if (idOpt.has_value())
*result = idOpt.value();
}
+ SignalManager::handleMetaCallError();
+}
+void SignalManager::handleMetaCallError()
+{
const int reclimit = Py_GetRecursionLimit();
// Inspired by Python's errors.c: PyErr_GivenExceptionMatches() function.
// Temporarily bump the recursion limit, so that PyErr_Print will not raise a recursion
diff --git a/sources/pyside6/libpyside/signalmanager.h b/sources/pyside6/libpyside/signalmanager.h
index 84d6b773e..ee39a3a8d 100644
--- a/sources/pyside6/libpyside/signalmanager.h
+++ b/sources/pyside6/libpyside/signalmanager.h
@@ -80,6 +80,7 @@ public:
static int callPythonMetaMethod(const QByteArrayList &parameterTypes,
const char *returnType /* = nullptr */,
void **args, PyObject *callable);
+ static void handleMetaCallError();
};
}