From 43ff11f564d90f7818d741ae4304462938c38438 Mon Sep 17 00:00:00 2001 From: Kai Dohmen Date: Thu, 28 Apr 2016 22:08:55 +0200 Subject: Remove deleted transport objects Added a QMultiHash which maps transport objects to wrapped object ids. transportRemoved iterates over all matching wrapped objects and removes the passed transport object from their transports-vector. If the transports-vector is empty after removing the passed transport object the objectDestroyed will be called on the wrapped object. transportRemoved will be called either on the transports destoryed signal or on disconnecting the webchannel from it. Without this changes the QMetaObjectPublisher::wrappedObjects and ::registeredObjectIds would only be cleaned up if the website calls deleteLater on QObjects but not on website reloads. Task-number: QTBUG-50074 Change-Id: If294564fee2406edd7fb578852aeb269cac23a92 Reviewed-by: Milian Wolff (cherry picked from commit fa2374d7c4dedea907e2df26fdad28bdee73b122) Reviewed-by: Frederik Gladhorn --- src/webchannel/qmetaobjectpublisher_p.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/webchannel/qmetaobjectpublisher_p.h') diff --git a/src/webchannel/qmetaobjectpublisher_p.h b/src/webchannel/qmetaobjectpublisher_p.h index 048a33c..95e5077 100644 --- a/src/webchannel/qmetaobjectpublisher_p.h +++ b/src/webchannel/qmetaobjectpublisher_p.h @@ -170,6 +170,11 @@ public: QVariant toVariant(const QJsonValue &value, int targetType) const; + /** + * Remove wrapped objects which last transport relation is with the passed transport object. + */ + void transportRemoved(QWebChannelAbstractTransport *transport); + /** * Given a QVariant containing a QObject*, wrap the object and register for property updates * return the objects class information. @@ -251,6 +256,8 @@ private: // Map of objects wrapped from invocation returns QHash wrappedObjects; + // Map of transports to wrapped object ids + QMultiHash transportedWrappedObjects; // Map of objects to maps of signal indices to a set of all their property indices. // The last value is a set as a signal can be the notify signal of multiple properties. -- cgit v1.2.1