diff options
author | V3n3RiX <venerix@koprulu.sector> | 2021-10-20 10:22:14 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2021-10-20 10:22:14 +0100 |
commit | 46eedbedafdb0040c37884982d4c775ce277fb7b (patch) | |
tree | db33a91259730be84999e13a8d8168c799f50ac0 /dev-qt/qtlocation/files | |
parent | e23a08d0c97a0cc415aaa165da840b056f93c997 (diff) |
gentoo resync : 20.10.2021
Diffstat (limited to 'dev-qt/qtlocation/files')
-rw-r--r-- | dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-1.patch | 66 | ||||
-rw-r--r-- | dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-2.patch | 115 |
2 files changed, 0 insertions, 181 deletions
diff --git a/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-1.patch b/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-1.patch deleted file mode 100644 index d4cd0188d1a1..000000000000 --- a/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-1.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 4fe9e0ed027134a833b2243597a2ccd00987b559 Mon Sep 17 00:00:00 2001 -From: Piotr Mikolajczyk <piotr.mikolajczyk@qt.io> -Date: Tue, 29 Sep 2020 10:41:23 +0200 -Subject: [PATCH] Fix crash when showing Map QML comp. for 2nd+ time - -Crash caused by storing pointer to a node that could be deleted elsewhere - -Fixes: QTBUG-85260 -Change-Id: I871123322fac84b8bf91e9bab8ecad08e75c2854 -Reviewed-by: Paolo Angelelli <paolo.angelelli.qt@gmail.com> ---- - src/location/labs/qsg/qgeomapobjectqsgsupport.cpp | 29 ++++++++++++++++++++++- - 1 file changed, 28 insertions(+), 1 deletion(-) - -diff --git a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -index 0e1df8f6c..cd1801305 100644 ---- a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -+++ b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -@@ -48,7 +48,32 @@ static int findMapObject(QGeoMapObject *o, const QList<MapObject> &list) - } - return -1; - } -+namespace { -+bool findNodeInStructure(QSGNode *root, QSGNode *item) -+{ -+ if (root == nullptr || item == nullptr) -+ return false; -+ if (root == item) -+ return true; -+ auto currentChild = root->firstChild(); -+ // First check the direct child nodes and if not found let's dive deeper -+ bool bFound = (item == currentChild); -+ -+ while (!bFound && currentChild) { -+ currentChild = currentChild->nextSibling(); -+ bFound = (item == currentChild); -+ } - -+ if (!bFound) { -+ currentChild = root->firstChild(); -+ while (!bFound && currentChild) { -+ bFound = findNodeInStructure(currentChild, item); -+ currentChild = currentChild->nextSibling(); -+ } -+ } -+ return bFound; -+} -+} - bool QGeoMapObjectQSGSupport::createMapObjectImplementation(QGeoMapObject *obj, QGeoMapPrivate *d) - { - QExplicitlySharedDataPointer<QGeoMapObjectPrivate> pimpl = -@@ -157,9 +182,11 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind - { - if (!root) - return; -+ if (!findNodeInStructure(root, m_mapObjectsRootNode)) -+ m_mapObjectsRootNode = nullptr; - if (!m_mapObjectsRootNode) { - m_mapObjectsRootNode = new QDeclarativePolygonMapItemPrivateOpenGL::RootNode(); -- root->appendChildNode(m_mapObjectsRootNode); -+ root->appendChildNode(m_mapObjectsRootNode); // PASSING OWNERSHIP! - } - - m_mapObjectsRootNode->removeAllChildNodes(); --- -2.16.3 diff --git a/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-2.patch b/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-2.patch deleted file mode 100644 index 4bd70b99abbf..000000000000 --- a/dev-qt/qtlocation/files/qtlocation-5.15.2-qsg-render-thread-crash-2.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 861e372b6ad81570d4f496e42fb25a6699b72f2f Mon Sep 17 00:00:00 2001 -From: Piotr Mikolajczyk <piotr.mikolajczyk@qt.io> -Date: Tue, 3 Nov 2020 11:43:22 +0100 -Subject: [PATCH] Simpler fix to crashing Qml Map appearing 2nd+ time - -Previous solution did not take advantage of the QSGNode::OwnedByParent -flag. Setting this flag to false allows to use parent() property -to determine if the node has been removed from node tree. -This amends 4fe9e0ed027134a833b2243597a2ccd00987b559 - -Fixes: QTBUG-85260 -Change-Id: I705848483d7dc2639dffffa0ff66c682b3fffca0 -Reviewed-by: Andy Shaw <andy.shaw@qt.io> ---- - src/location/labs/qsg/qgeomapobjectqsgsupport.cpp | 40 +++++------------------ - src/location/labs/qsg/qgeomapobjectqsgsupport_p.h | 3 +- - 2 files changed, 11 insertions(+), 32 deletions(-) - -diff --git a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -index cd1801305..a978573d6 100644 ---- a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -+++ b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp -@@ -48,32 +48,7 @@ static int findMapObject(QGeoMapObject *o, const QList<MapObject> &list) - } - return -1; - } --namespace { --bool findNodeInStructure(QSGNode *root, QSGNode *item) --{ -- if (root == nullptr || item == nullptr) -- return false; -- if (root == item) -- return true; -- auto currentChild = root->firstChild(); -- // First check the direct child nodes and if not found let's dive deeper -- bool bFound = (item == currentChild); -- -- while (!bFound && currentChild) { -- currentChild = currentChild->nextSibling(); -- bFound = (item == currentChild); -- } - -- if (!bFound) { -- currentChild = root->firstChild(); -- while (!bFound && currentChild) { -- bFound = findNodeInStructure(currentChild, item); -- currentChild = currentChild->nextSibling(); -- } -- } -- return bFound; --} --} - bool QGeoMapObjectQSGSupport::createMapObjectImplementation(QGeoMapObject *obj, QGeoMapPrivate *d) - { - QExplicitlySharedDataPointer<QGeoMapObjectPrivate> pimpl = -@@ -182,11 +157,14 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind - { - if (!root) - return; -- if (!findNodeInStructure(root, m_mapObjectsRootNode)) -- m_mapObjectsRootNode = nullptr; -+ -+ if (m_mapObjectsRootNode && m_mapObjectsRootNode->parent()) -+ root->appendChildNode(m_mapObjectsRootNode.get()); -+ - if (!m_mapObjectsRootNode) { -- m_mapObjectsRootNode = new QDeclarativePolygonMapItemPrivateOpenGL::RootNode(); -- root->appendChildNode(m_mapObjectsRootNode); // PASSING OWNERSHIP! -+ m_mapObjectsRootNode = std::make_unique<QDeclarativePolygonMapItemPrivateOpenGL::RootNode>(); -+ root->appendChildNode(m_mapObjectsRootNode.get()); -+ m_mapObjectsRootNode->setFlag(QSGNode::OwnedByParent, false); - } - - m_mapObjectsRootNode->removeAllChildNodes(); -@@ -211,7 +189,7 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind - MapObject &mo = m_mapObjects[i]; - QQSGMapObject *sgo = mo.sgObject; - QSGNode *oldNode = mo.qsgNode; -- mo.qsgNode = sgo->updateMapObjectNode(oldNode, &mo.visibleNode, m_mapObjectsRootNode, window); -+ mo.qsgNode = sgo->updateMapObjectNode(oldNode, &mo.visibleNode, m_mapObjectsRootNode.get(), window); - if (Q_UNLIKELY(!mo.qsgNode)) { - qWarning() << "updateMapObjectNode for "<<mo.object->type() << " returned NULL"; - } else if (mo.visibleNode && (mo.visibleNode->visible() != mo.object->visible())) { -@@ -227,7 +205,7 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind - QQSGMapObject *sgo = mo.sgObject; - QSGNode *oldNode = mo.qsgNode; - sgo->updateGeometry(); // or subtree will be blocked -- mo.qsgNode = sgo->updateMapObjectNode(oldNode, &mo.visibleNode, m_mapObjectsRootNode, window); -+ mo.qsgNode = sgo->updateMapObjectNode(oldNode, &mo.visibleNode, m_mapObjectsRootNode.get(), window); - if (mo.qsgNode) { - if (mo.visibleNode && (mo.visibleNode->visible() != mo.object->visible())) { - mo.visibleNode->setVisible(mo.object->visible()); -diff --git a/src/location/labs/qsg/qgeomapobjectqsgsupport_p.h b/src/location/labs/qsg/qgeomapobjectqsgsupport_p.h -index 1ec966fa9..cbbc09691 100644 ---- a/src/location/labs/qsg/qgeomapobjectqsgsupport_p.h -+++ b/src/location/labs/qsg/qgeomapobjectqsgsupport_p.h -@@ -59,6 +59,7 @@ - #include <QtLocation/private/qdeclarativepolylinemapitem_p.h> - #include <QtLocation/private/qdeclarativepolygonmapitem_p_p.h> - #include <QtCore/qpointer.h> -+#include <memory> - - QT_BEGIN_NAMESPACE - struct Q_LOCATION_PRIVATE_EXPORT MapObject { -@@ -85,7 +86,7 @@ public: - QList<MapObject> m_pendingMapObjects; - QList<MapObject> m_removedMapObjects; - QGeoMap *m_map = nullptr; -- QDeclarativePolygonMapItemPrivateOpenGL::RootNode *m_mapObjectsRootNode = nullptr; -+ std::unique_ptr<QDeclarativePolygonMapItemPrivateOpenGL::RootNode> m_mapObjectsRootNode; - }; - - QT_END_NAMESPACE --- -2.16.3 |