diff options
Diffstat (limited to 'src/webchannel/qmetaobjectpublisher.cpp')
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index b4747d4..148404d 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -459,29 +459,6 @@ void QMetaObjectPublisher::objectDestroyed(const QObject *object) pendingPropertyUpdates.remove(object); } -void QMetaObjectPublisher::transportRemoved(QWebChannelAbstractTransport *transport) -{ - QHash<QWebChannelAbstractTransport*, QString>::iterator it = transportedWrappedObjects.find(transport); - // It is not allowed to modify a container while iterating over it. So save - // objects which should be removed and call objectDestroyed() on them later. - QVector<QObject*> objectsForDeletion; - while (it != transportedWrappedObjects.end() && it.key() == transport) { - if (wrappedObjects.contains(it.value())) { - QVector<QWebChannelAbstractTransport*> &transports = wrappedObjects[it.value()].transports; - transports.removeOne(transport); - if (transports.isEmpty()) - objectsForDeletion.append(wrappedObjects[it.value()].object); - } - - it++; - } - - transportedWrappedObjects.remove(transport); - - foreach (QObject *obj, objectsForDeletion) - objectDestroyed(obj); -} - QObject *QMetaObjectPublisher::unwrapObject(const QString &objectId) const { if (!objectId.isEmpty()) { @@ -522,6 +499,29 @@ QVariant QMetaObjectPublisher::toVariant(const QJsonValue &value, int targetType return variant; } +void QMetaObjectPublisher::transportRemoved(QWebChannelAbstractTransport *transport) +{ + auto it = transportedWrappedObjects.find(transport); + // It is not allowed to modify a container while iterating over it. So save + // objects which should be removed and call objectDestroyed() on them later. + QVector<QObject*> objectsForDeletion; + while (it != transportedWrappedObjects.end() && it.key() == transport) { + if (wrappedObjects.contains(it.value())) { + QVector<QWebChannelAbstractTransport*> &transports = wrappedObjects[it.value()].transports; + transports.removeOne(transport); + if (transports.isEmpty()) + objectsForDeletion.append(wrappedObjects[it.value()].object); + } + + it++; + } + + transportedWrappedObjects.remove(transport); + + foreach (QObject *obj, objectsForDeletion) + objectDestroyed(obj); +} + // NOTE: transport can be a nullptr // in such a case, we need to ensure that the property is registered to // the target transports of the parentObjectId |