tst_QParallelAnimationGroup: fix memleak
Setting the parent of a QObject to nullptr means the ex-parent no longer owns and deletes the object as its child, leaking it. Fix by creating a scope-guard to defer deletion until the tests have run. This is simpler than the alternatives: Putting it into unique_ptr would require a new variable name, or a larger refactoring of the function, because the `test` variable is being re-used for many different objects in the course of the function, most of which should not be deleted. Using QAutoPointer would drag in QtWidgetsPrivate, and the class is probably not available in all active branches. Finally, deleteLater() would require reliably returning to the event loop, which may not happen if the test is run in isolation. Bug exists since the dawn of the public history, and QScopeGuard is available in all active branches. Pick-to: 6.6 6.5 6.2 5.15 Change-Id: Ib4fcb44b0b68d4ccbcf5af144a18ffb378a72213 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
This commit is contained in:
parent
08605f0d78
commit
e667624371
@ -7,6 +7,7 @@
|
|||||||
#include <QSignalSpy>
|
#include <QSignalSpy>
|
||||||
|
|
||||||
#include <QtCore/qparallelanimationgroup.h>
|
#include <QtCore/qparallelanimationgroup.h>
|
||||||
|
#include <QtCore/qscopeguard.h>
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(QAbstractAnimation::State)
|
Q_DECLARE_METATYPE(QAbstractAnimation::State)
|
||||||
|
|
||||||
@ -928,6 +929,7 @@ void tst_QParallelAnimationGroup::autoAdd()
|
|||||||
|
|
||||||
test = static_cast<TestAnimation2*>(group.animationAt(0));
|
test = static_cast<TestAnimation2*>(group.animationAt(0));
|
||||||
test->setParent(0); // remove the last one (with duration = 250)
|
test->setParent(0); // remove the last one (with duration = 250)
|
||||||
|
const auto deleteParentlessObject = qScopeGuard([test] { delete test; });
|
||||||
QCOMPARE(test->group(), static_cast<QAnimationGroup*>(0));
|
QCOMPARE(test->group(), static_cast<QAnimationGroup*>(0));
|
||||||
QCOMPARE(group.duration(), 0);
|
QCOMPARE(group.duration(), 0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user