summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-06-24 10:57:24 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-06-25 13:13:11 +0200
commit5d6c671232ca466a929cc23ee8ae92de2ce9ca8d (patch)
treea1c38a7decfad430ff4be46ed3ec97e717a8448f
parenta4e5f82186d11f7a4dcd32f74d5efd3f131a627f (diff)
downloadqtdeclarative-5d6c671232ca466a929cc23ee8ae92de2ce9ca8d.tar.gz
Don't leak QQmlBoundSignalExpressions in signaltransition.cpp
We need to adopt them, not addref the newly created object. Fixes: QTBUG-83214 Change-Id: Ic8660e65d4b7c7698657f6b2806b5478f7f15ea1 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 6de0287d7c3aa4251fe6eb4f970d73ce11cf07fc)
-rw-r--r--src/imports/statemachine/signaltransition.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/imports/statemachine/signaltransition.cpp b/src/imports/statemachine/signaltransition.cpp
index 69edaa4e48..8c37f8368f 100644
--- a/src/imports/statemachine/signaltransition.cpp
+++ b/src/imports/statemachine/signaltransition.cpp
@@ -176,12 +176,14 @@ void SignalTransition::connectTriggered()
int signalIndex = QMetaObjectPrivate::signalIndex(metaMethod);
auto f = m_compilationUnit->runtimeFunctions[binding->value.compiledScriptIndex];
- QQmlBoundSignalExpression *expression =
- ctxtdata ? new QQmlBoundSignalExpression(target, signalIndex, ctxtdata, this, f)
- : nullptr;
- if (expression)
+ if (ctxtdata) {
+ QQmlBoundSignalExpression *expression =
+ new QQmlBoundSignalExpression(target, signalIndex, ctxtdata, this, f);
expression->setNotifyOnValueChanged(false);
- m_signalExpression = expression;
+ m_signalExpression.take(expression);
+ } else {
+ m_signalExpression.take(nullptr);
+ }
}
void SignalTransitionParser::verifyBindings(const QQmlRefPointer<QV4::ExecutableCompilationUnit> &compilationUnit, const QList<const QV4::CompiledData::Binding *> &props)