aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-09-07 14:16:06 +0200
committerJani Heikkinen <jani.heikkinen@qt.io>2023-09-11 06:29:54 +0000
commit6ad23dc4026b87b973ac2f2db208857105e14fea (patch)
treec08b2049958567813621446fa3e6b15c457aed55
parentb402b8c38c6eb02d12058416caba1e838ce3f411 (diff)
QQmlBind: Move delayedName into place rather than taking it by const refv6.6.0-beta4
Using a const reference triggers QTBUG-116742 because the refcounting fails in some non-obvious way. Moving the string into place avoids touching the refcount. Task-number: QTBUG-116742 Change-Id: I9195ad84ac2c97d6624cd29e4c747f66c7919b09 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 034cd962f5196b4d729459f01869169b37956597)
-rw-r--r--src/qml/types/qqmlbind.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/qml/types/qqmlbind.cpp b/src/qml/types/qqmlbind.cpp
index cdca6e89d4..53f1a90c82 100644
--- a/src/qml/types/qqmlbind.cpp
+++ b/src/qml/types/qqmlbind.cpp
@@ -281,7 +281,7 @@ public:
const QV4::CompiledData::Binding *binding,
QQmlComponentPrivate::ConstructionState *immediateState);
void createDelayedValues();
- void onDelayedValueChanged(const QString &delayedName);
+ void onDelayedValueChanged(QString delayedName);
void evalDelayed();
void buildBindEntries(QQmlBind *q, QQmlComponentPrivate::DeferredState *deferredState);
};
@@ -898,14 +898,14 @@ void QQmlBindPrivate::createDelayedValues()
delayedValues = std::make_unique<QQmlPropertyMap>();
QObject::connect(
delayedValues.get(), &QQmlPropertyMap::valueChanged,
- delayedValues.get(), [this](const QString &delayedName, const QVariant &value) {
+ delayedValues.get(), [this](QString delayedName, const QVariant &value) {
Q_UNUSED(value);
- onDelayedValueChanged(delayedName);
+ onDelayedValueChanged(std::move(delayedName));
}
);
}
-void QQmlBindPrivate::onDelayedValueChanged(const QString &delayedName)
+void QQmlBindPrivate::onDelayedValueChanged(QString delayedName)
{
Q_ASSERT(delayed);
Q_ASSERT(delayedValues);
@@ -916,7 +916,7 @@ void QQmlBindPrivate::onDelayedValueChanged(const QString &delayedName)
else if (pending.contains(delayedName))
return;
- pending.append(delayedName);
+ pending.append(std::move(delayedName));
(*delayedValues)[pendingName].setValue(std::move(pending));
}