diff options
author | Arno Rehn <a.rehn@menlosystems.com> | 2019-02-04 11:51:52 +0100 |
---|---|---|
committer | Arno Rehn <a.rehn@menlosystems.com> | 2019-02-04 15:24:32 +0000 |
commit | d14c6aa5855ebfb8bb624efd7817bb3cdd4c96e4 (patch) | |
tree | 2984d8ce4625d1f66b3fbaf54086cc56f2d4128e /src | |
parent | 38b5128c63ba38303f0587e03536ed546c1f2eca (diff) | |
download | qtwebchannel-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.cpp | 8 |
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; } |