summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-02-10 07:59:56 +0100
committerPaul Lemire <paul.lemire@kdab.com>2020-02-10 10:44:52 +0100
commit547b0b00244f1535eab4456a02b75b46776eae51 (patch)
tree899a4c4f5e2c0cdc1d8de6613c431c25b09f8424
parent648b7459e8a6ce8ce1f115a14da63d546b743439 (diff)
Check we remove a valid node when removing from node properties
Change-Id: Ibcc4d9bfd9d0a9d7697151915f24a6eecc149f6d Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r--src/animation/frontend/qchannelmapper.cpp3
-rw-r--r--src/render/framegraph/qlayerfilter.cpp3
-rw-r--r--src/render/framegraph/qrenderpassfilter.cpp6
-rw-r--r--src/render/framegraph/qrenderstateset.cpp3
-rw-r--r--src/render/framegraph/qtechniquefilter.cpp6
-rw-r--r--src/render/frontend/qrendertarget.cpp3
-rw-r--r--src/render/geometry/qgeometry.cpp3
-rw-r--r--src/render/materialsystem/qeffect.cpp9
-rw-r--r--src/render/materialsystem/qmaterial.cpp4
-rw-r--r--src/render/materialsystem/qrenderpass.cpp9
-rw-r--r--src/render/materialsystem/qtechnique.cpp9
-rw-r--r--src/render/picking/qabstractraycaster.cpp3
-rw-r--r--src/render/texture/qabstracttexture.cpp3
13 files changed, 42 insertions, 22 deletions
diff --git a/src/animation/frontend/qchannelmapper.cpp b/src/animation/frontend/qchannelmapper.cpp
index c5909adbc..aa88add1a 100644
--- a/src/animation/frontend/qchannelmapper.cpp
+++ b/src/animation/frontend/qchannelmapper.cpp
@@ -94,7 +94,8 @@ void QChannelMapper::removeMapping(QAbstractChannelMapping *mapping)
{
Q_ASSERT(mapping);
Q_D(QChannelMapper);
- d->m_mappings.removeOne(mapping);
+ if (!d->m_mappings.removeOne(mapping))
+ return;
d->updateNode(mapping, "mappings", Qt3DCore::PropertyValueRemoved);
// Remove bookkeeping connection
d->unregisterDestructionHelper(mapping);
diff --git a/src/render/framegraph/qlayerfilter.cpp b/src/render/framegraph/qlayerfilter.cpp
index 8bad46f5d..5557687ce 100644
--- a/src/render/framegraph/qlayerfilter.cpp
+++ b/src/render/framegraph/qlayerfilter.cpp
@@ -214,8 +214,9 @@ void QLayerFilter::removeLayer(QLayer *layer)
{
Q_ASSERT(layer);
Q_D(QLayerFilter);
+ if (!d->m_layers.removeOne(layer))
+ return;
d->updateNode(layer, "layer", Qt3DCore::PropertyValueRemoved);
- d->m_layers.removeOne(layer);
// Remove bookkeeping connection
d->unregisterDestructionHelper(layer);
}
diff --git a/src/render/framegraph/qrenderpassfilter.cpp b/src/render/framegraph/qrenderpassfilter.cpp
index 952657eb6..34462ebdf 100644
--- a/src/render/framegraph/qrenderpassfilter.cpp
+++ b/src/render/framegraph/qrenderpassfilter.cpp
@@ -151,8 +151,9 @@ void QRenderPassFilter::removeMatch(QFilterKey *filterKey)
Q_ASSERT(filterKey);
Q_D(QRenderPassFilter);
+ if (!d->m_matchList.removeOne(filterKey))
+ return;
d->updateNode(filterKey, "match", Qt3DCore::PropertyValueRemoved);
- d->m_matchList.removeOne(filterKey);
// Remove bookkeeping connection
d->unregisterDestructionHelper(filterKey);
}
@@ -189,8 +190,9 @@ void QRenderPassFilter::removeParameter(QParameter *parameter)
Q_ASSERT(parameter);
Q_D(QRenderPassFilter);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
- d->m_parameters.removeOne(parameter);
// Remove bookkeeping connection
d->unregisterDestructionHelper(parameter);
}
diff --git a/src/render/framegraph/qrenderstateset.cpp b/src/render/framegraph/qrenderstateset.cpp
index 5341b3c7d..ac82954c8 100644
--- a/src/render/framegraph/qrenderstateset.cpp
+++ b/src/render/framegraph/qrenderstateset.cpp
@@ -203,8 +203,9 @@ void QRenderStateSet::removeRenderState(QRenderState *state)
Q_ASSERT(state);
Q_D(QRenderStateSet);
+ if (!d->m_renderStates.removeOne(state))
+ return;
d->updateNode(state, "renderState", Qt3DCore::PropertyValueRemoved);
- d->m_renderStates.removeOne(state);
// Remove bookkeeping connection
d->unregisterDestructionHelper(state);
}
diff --git a/src/render/framegraph/qtechniquefilter.cpp b/src/render/framegraph/qtechniquefilter.cpp
index c22e83381..5377e1297 100644
--- a/src/render/framegraph/qtechniquefilter.cpp
+++ b/src/render/framegraph/qtechniquefilter.cpp
@@ -155,8 +155,9 @@ void QTechniqueFilter::removeMatch(QFilterKey *filterKey)
{
Q_ASSERT(filterKey);
Q_D(QTechniqueFilter);
+ if (!d->m_matchList.removeOne(filterKey))
+ return;
d->updateNode(filterKey, "matchAll", Qt3DCore::PropertyValueRemoved);
- d->m_matchList.removeOne(filterKey);
// Remove bookkeeping connection
d->unregisterDestructionHelper(filterKey);
}
@@ -192,8 +193,9 @@ void QTechniqueFilter::removeParameter(QParameter *parameter)
{
Q_ASSERT(parameter);
Q_D(QTechniqueFilter);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
- d->m_parameters.removeOne(parameter);
// Remove bookkeeping connection
d->unregisterDestructionHelper(parameter);
}
diff --git a/src/render/frontend/qrendertarget.cpp b/src/render/frontend/qrendertarget.cpp
index 57eecd795..7e0403c13 100644
--- a/src/render/frontend/qrendertarget.cpp
+++ b/src/render/frontend/qrendertarget.cpp
@@ -134,8 +134,9 @@ void QRenderTarget::removeOutput(QRenderTargetOutput *output)
{
Q_D(QRenderTarget);
+ if (!d->m_outputs.removeOne(output))
+ return;
d->updateNode(output, "output", Qt3DCore::PropertyValueRemoved);
- d->m_outputs.removeOne(output);
// Remove bookkeeping connection
d->unregisterDestructionHelper(output);
}
diff --git a/src/render/geometry/qgeometry.cpp b/src/render/geometry/qgeometry.cpp
index 48f054bce..ac22f2db1 100644
--- a/src/render/geometry/qgeometry.cpp
+++ b/src/render/geometry/qgeometry.cpp
@@ -206,7 +206,8 @@ void QGeometry::removeAttribute(QAttribute *attribute)
{
Q_ASSERT(attribute);
Q_D(QGeometry);
- d->m_attributes.removeOne(attribute);
+ if (!d->m_attributes.removeOne(attribute))
+ return;
// Remove bookkeeping connection
d->unregisterDestructionHelper(attribute);
d->updateNode(attribute, "attribute", Qt3DCore::PropertyValueRemoved);
diff --git a/src/render/materialsystem/qeffect.cpp b/src/render/materialsystem/qeffect.cpp
index 8637a92d4..9f4b3db94 100644
--- a/src/render/materialsystem/qeffect.cpp
+++ b/src/render/materialsystem/qeffect.cpp
@@ -203,7 +203,8 @@ void QEffect::removeParameter(QParameter *parameter)
{
Q_D(QEffect);
- d->m_parameters.removeOne(parameter);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
// Remove bookkeeping connection
d->unregisterDestructionHelper(parameter);
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
@@ -248,9 +249,9 @@ void QEffect::addTechnique(QTechnique *t)
void QEffect::removeTechnique(QTechnique *t)
{
Q_D(QEffect);
- if (t)
- d->updateNode(t, "technique", Qt3DCore::PropertyValueRemoved);
- d->m_techniques.removeOne(t);
+ if (!d->m_techniques.removeOne(t))
+ return;
+ d->updateNode(t, "technique", Qt3DCore::PropertyValueRemoved);
// Remove bookkeeping connection
d->unregisterDestructionHelper(t);
}
diff --git a/src/render/materialsystem/qmaterial.cpp b/src/render/materialsystem/qmaterial.cpp
index edd227500..a1bec183b 100644
--- a/src/render/materialsystem/qmaterial.cpp
+++ b/src/render/materialsystem/qmaterial.cpp
@@ -283,8 +283,10 @@ void QMaterial::removeParameter(QParameter *parameter)
{
Q_ASSERT(parameter);
Q_D(QMaterial);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
+ d->unregisterDestructionHelper(parameter);
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
- d->m_parameters.removeOne(parameter);
}
/*!
diff --git a/src/render/materialsystem/qrenderpass.cpp b/src/render/materialsystem/qrenderpass.cpp
index dcb831b13..33181f4fe 100644
--- a/src/render/materialsystem/qrenderpass.cpp
+++ b/src/render/materialsystem/qrenderpass.cpp
@@ -285,8 +285,9 @@ void QRenderPass::removeFilterKey(QFilterKey *filterKey)
{
Q_ASSERT(filterKey);
Q_D(QRenderPass);
+ if (!d->m_filterKeyList.removeOne(filterKey))
+ return;
d->updateNode(filterKey, "filterKeys", Qt3DCore::PropertyValueRemoved);
- d->m_filterKeyList.removeOne(filterKey);
// Remove bookkeeping connection
d->unregisterDestructionHelper(filterKey);
}
@@ -333,8 +334,9 @@ void QRenderPass::removeRenderState(QRenderState *state)
{
Q_ASSERT(state);
Q_D(QRenderPass);
+ if (!d->m_renderStates.removeOne(state))
+ return;
d->updateNode(state, "renderState", Qt3DCore::PropertyValueRemoved);
- d->m_renderStates.removeOne(state);
// Remove bookkeeping connection
d->unregisterDestructionHelper(state);
}
@@ -380,8 +382,9 @@ void QRenderPass::removeParameter(QParameter *parameter)
{
Q_ASSERT(parameter);
Q_D(QRenderPass);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
- d->m_parameters.removeOne(parameter);
// Remove bookkeeping connection
d->unregisterDestructionHelper(parameter);
}
diff --git a/src/render/materialsystem/qtechnique.cpp b/src/render/materialsystem/qtechnique.cpp
index a9b7ca82b..0e1787938 100644
--- a/src/render/materialsystem/qtechnique.cpp
+++ b/src/render/materialsystem/qtechnique.cpp
@@ -269,8 +269,9 @@ void QTechnique::removeFilterKey(QFilterKey *filterKey)
{
Q_ASSERT(filterKey);
Q_D(QTechnique);
+ if (!d->m_filterKeys.removeOne(filterKey))
+ return;
d->updateNode(filterKey, "filterKeys", Qt3DCore::PropertyValueRemoved);
- d->m_filterKeys.removeOne(filterKey);
// Remove bookkeeping connection
d->unregisterDestructionHelper(filterKey);
}
@@ -316,8 +317,9 @@ void QTechnique::removeParameter(QParameter *parameter)
{
Q_ASSERT(parameter);
Q_D(QTechnique);
+ if (!d->m_parameters.removeOne(parameter))
+ return;
d->updateNode(parameter, "parameter", Qt3DCore::PropertyValueRemoved);
- d->m_parameters.removeOne(parameter);
// Remove bookkeeping connection
d->unregisterDestructionHelper(parameter);
}
@@ -353,8 +355,9 @@ void QTechnique::removeRenderPass(QRenderPass *pass)
{
Q_ASSERT(pass);
Q_D(QTechnique);
+ if (!d->m_renderPasses.removeOne(pass))
+ return;
d->updateNode(pass, "pass", Qt3DCore::PropertyValueAdded);
- d->m_renderPasses.removeOne(pass);
// Remove bookkeeping connection
d->unregisterDestructionHelper(pass);
}
diff --git a/src/render/picking/qabstractraycaster.cpp b/src/render/picking/qabstractraycaster.cpp
index 5f4c4c490..ea71b4b6e 100644
--- a/src/render/picking/qabstractraycaster.cpp
+++ b/src/render/picking/qabstractraycaster.cpp
@@ -352,12 +352,13 @@ void QAbstractRayCaster::removeLayer(QLayer *layer)
{
Q_ASSERT(layer);
Q_D(QAbstractRayCaster);
+ if (!d->m_layers.removeOne(layer))
+ return;
if (d->m_changeArbiter != nullptr) {
const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), layer);
change->setPropertyName("layer");
d->notifyObservers(change);
}
- d->m_layers.removeOne(layer);
// Remove bookkeeping connection
d->unregisterDestructionHelper(layer);
}
diff --git a/src/render/texture/qabstracttexture.cpp b/src/render/texture/qabstracttexture.cpp
index 258ab44dc..cbe4b71af 100644
--- a/src/render/texture/qabstracttexture.cpp
+++ b/src/render/texture/qabstracttexture.cpp
@@ -791,8 +791,9 @@ void QAbstractTexture::removeTextureImage(QAbstractTextureImage *textureImage)
{
Q_ASSERT(textureImage);
Q_D(QAbstractTexture);
+ if (!d->m_textureImages.removeOne(textureImage))
+ return;
d->updateNode(textureImage, "textureImage", PropertyValueRemoved);
- d->m_textureImages.removeOne(textureImage);
// Remove bookkeeping connection
d->unregisterDestructionHelper(textureImage);
}