summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArno Rehn <a.rehn@menlosystems.com>2019-02-04 11:51:52 +0100
committerArno Rehn <a.rehn@menlosystems.com>2019-02-04 15:24:32 +0000
commitd14c6aa5855ebfb8bb624efd7817bb3cdd4c96e4 (patch)
tree2984d8ce4625d1f66b3fbaf54086cc56f2d4128e /src
parent38b5128c63ba38303f0587e03536ed546c1f2eca (diff)
downloadqtwebchannel-d14c6aa5855ebfb8bb624efd7817bb3cdd4c96e4.tar.gz
Also add already wrapped objects to the transport-to-objects map
Fixes a crash: Previously, when a connection was closed, the transport was not removed from the list of transports of a wrapped objects. This was because the transport was not added to the transport-to-object map in the first place. When a property update was pushed, the now dangling pointer to the "old" transport caused a crash. Change-Id: Ib980f0b874851f8f85f7a3d76d51a2c884504b96 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/webchannel/qmetaobjectpublisher.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp
index b34b39e..3b2c016 100644
--- a/src/webchannel/qmetaobjectpublisher.cpp
+++ b/src/webchannel/qmetaobjectpublisher.cpp
@@ -591,8 +591,12 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA
} else if (wrappedObjects.contains(id)) {
Q_ASSERT(object == wrappedObjects.value(id).object);
// check if this transport is already assigned to the object
- if (transport && !wrappedObjects.value(id).transports.contains(transport))
- wrappedObjects[id].transports.append(transport);
+ if (transport) {
+ if (!wrappedObjects.value(id).transports.contains(transport))
+ wrappedObjects[id].transports.append(transport);
+ if (!transportedWrappedObjects.contains(transport, id))
+ transportedWrappedObjects.insertMulti(transport, id);
+ }
classInfo = wrappedObjects.value(id).classinfo;
}