diff options
-rw-r--r-- | src/testlib/qsignalspy.cpp | 3 | ||||
-rw-r--r-- | src/testlib/qsignalspy.h | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/testlib/qsignalspy.cpp b/src/testlib/qsignalspy.cpp index 05b9868e34..52be7ff212 100644 --- a/src/testlib/qsignalspy.cpp +++ b/src/testlib/qsignalspy.cpp @@ -223,17 +223,14 @@ QSignalSpy::ObjectSignal QSignalSpy::verify(const QObject *obj, QMetaMethod sign QList<int> QSignalSpy::makeArgs(const QMetaMethod &member, const QObject *obj) { QList<int> result; - QMutexLocker locker(&m_mutex); result.reserve(member.parameterCount()); for (int i = 0; i < member.parameterCount(); ++i) { QMetaType tp = member.parameterMetaType(i); if (!tp.isValid() && obj) { - locker.unlock(); void *argv[] = { &tp, &i }; QMetaObject::metacall(const_cast<QObject*>(obj), QMetaObject::RegisterMethodArgumentMetaType, member.methodIndex(), argv); - locker.relock(); } if (!tp.isValid()) { qWarning("QSignalSpy: Unable to handle parameter '%s' of type '%s' of method '%s'," diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h index af9587b369..cbb3bfbe42 100644 --- a/src/testlib/qsignalspy.h +++ b/src/testlib/qsignalspy.h @@ -12,6 +12,8 @@ #include <QtCore/qvariant.h> #include <QtCore/qmutex.h> +#include <mutex> + QT_BEGIN_NAMESPACE @@ -66,7 +68,12 @@ private: { if (!os.obj) return; - args = makeArgs(os.sig, os.obj); + + auto tmp = makeArgs(os.sig, os.obj); + { + const auto lock = std::scoped_lock(m_mutex); + args = std::move(tmp); + } if (!connectToSignal(os.obj, os.sig.methodIndex())) return; @@ -82,7 +89,7 @@ private: Q_TESTLIB_EXPORT static bool isSignalMetaMethodValid(const QMetaMethod &signal); Q_TESTLIB_EXPORT static bool isObjectValid(const QObject *object); - Q_TESTLIB_EXPORT QList<int> makeArgs(const QMetaMethod &member, const QObject *obj); + Q_TESTLIB_EXPORT static QList<int> makeArgs(const QMetaMethod &member, const QObject *obj); Q_TESTLIB_EXPORT void appendArgs(void **a); // the full, normalized signal name |