From 64ab935e0a69b1ad5bdb6f59dbe3f9304716c02a Mon Sep 17 00:00:00 2001 From: Louis du Verdier Date: Sat, 28 Dec 2019 14:53:03 +0100 Subject: Stabilize QQuickItemParticle This commit fixes two crashes and a memory leak in QQuickItemParticle. The first crash was caused by the list m_loadables that kept pointers on QQuickParticleData, that could in the meantime become dangling pointers if the associated particle expired or got deleted by a call to the reset() method of the particle system. Its role was to keep a list of particles that did not have a delegate instantiated yet, in order to create them in the tick() method. This list is removed and the list of particles to handle is directly deduced in the tick() method. The second crash was caused by the list m_deletables that could in some situations (generally due to a reset()) contain multiple times the same delegate, and therefore cause a double delete in processDeletables(). This list is changed to a set to avoid this situation with a minimum impact on the rest of the code. The memory leak was caused by the m_managed list of delegates that was not freed when QQuickItemParticle gets deleted. Task-number: QTBUG-71193 Change-Id: I6fe30ee59a9a0bb90c14c62c7a48a50f465a9e0c Reviewed-by: Mikhail Svetkin --- src/particles/qquickitemparticle_p.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/particles/qquickitemparticle_p.h') diff --git a/src/particles/qquickitemparticle_p.h b/src/particles/qquickitemparticle_p.h index 7867add4e4..b278008460 100644 --- a/src/particles/qquickitemparticle_p.h +++ b/src/particles/qquickitemparticle_p.h @@ -106,9 +106,8 @@ protected: private: void processDeletables(); void tick(int time = 0); - QList m_deletables; + QSet m_deletables; QList m_managed; - QList< QQuickParticleData* > m_loadables; bool m_fade; QList m_pendingItems; -- cgit v1.2.3