summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2024-03-21 18:18:30 +0100
committerMarc Mutz <marc.mutz@qt.io>2024-04-24 22:34:14 +0200
commit46ad7fe966f6c191ff2123e95c3b6373f7b24287 (patch)
tree72c80b5e08595cae0da45eb0b89fabd9c12809e6
parent951bf6e3ec7c518dfc6b672cd1f99bcb5a347084 (diff)
QSignalSpy: make args member constHEADdev
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 <edward.welbourne@qt.io> Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
-rw-r--r--src/testlib/qsignalspy.cpp2
-rw-r--r--src/testlib/qsignalspy.h12
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<QVariant> 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 <QtCore/qvariant.h>
#include <QtCore/qmutex.h>
-#include <mutex>
-
QT_BEGIN_NAMESPACE
@@ -65,15 +63,11 @@ public:
private:
explicit QSignalSpy(ObjectSignal os)
+ : args(os.obj ? makeArgs(os.sig, os.obj) : QList<int>{})
{
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<int> args;
+ const QList<int> 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