From 46ad7fe966f6c191ff2123e95c3b6373f7b24287 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 21 Mar 2024 18:18:30 +0100 Subject: QSignalSpy: make args member const This means it's implicitly thread-safe now and we don't need to protect accesses to it with the mutex. Task-number: QTBUG-123544 Change-Id: I9f826003dca6fb81e7a75e283482c81ecff09be0 Reviewed-by: Edward Welbourne Reviewed-by: Ahmad Samir --- src/testlib/qsignalspy.cpp | 2 +- src/testlib/qsignalspy.h | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/testlib/qsignalspy.cpp b/src/testlib/qsignalspy.cpp index 9a5efcd000..78eb14e6d8 100644 --- a/src/testlib/qsignalspy.cpp +++ b/src/testlib/qsignalspy.cpp @@ -258,7 +258,6 @@ bool QSignalSpy::connectToSignal(const QObject *sender, int sigIndex) void QSignalSpy::appendArgs(void **a) { - QMutexLocker locker(&m_mutex); QList list; list.reserve(args.size()); for (qsizetype i = 0; i < args.size(); ++i) { @@ -268,6 +267,7 @@ void QSignalSpy::appendArgs(void **a) else list << QVariant(QMetaType(type), a[i + 1]); } + QMutexLocker locker(&m_mutex); append(std::move(list)); if (m_waiting) { diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h index ccde13820a..5f52c1dcdf 100644 --- a/src/testlib/qsignalspy.h +++ b/src/testlib/qsignalspy.h @@ -12,8 +12,6 @@ #include #include -#include - QT_BEGIN_NAMESPACE @@ -65,15 +63,11 @@ public: private: explicit QSignalSpy(ObjectSignal os) + : args(os.obj ? makeArgs(os.sig, os.obj) : QList{}) { if (!os.obj) return; - 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; @@ -92,11 +86,11 @@ private: // the full, normalized signal name QByteArray sig; // holds the QMetaType types for the argument list of the signal - QList args; + const QList args; QTestEventLoop m_loop; bool m_waiting = false; - QMutex m_mutex; // protects m_waiting, args and the QList base class, between appendArgs() and wait() + QMutex m_mutex; // protects m_waiting and the QList base class, between appendArgs() and wait() }; QT_END_NAMESPACE -- cgit v1.2.3