summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2016-05-24 20:05:30 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-05-25 14:44:01 +0000
commit80ddebcf2bb12debf43321c8b780c64fe1c5904e (patch)
tree2eaa24b7ae97ea1630840c4239d5c28671ce459e /src
parentd3131c34b421530e29825230ca4392a56c651ef6 (diff)
Node bookkeeping fix: clear table of connection in QNode dtor
Clearing it in the QNodePrivate dtor is actually too late, this needs to happen before QNode::destroyed is emitted. Task-number: QTBUG-53456 Change-Id: I4141b51c3576a348fa4c82a2a4e7806d8b545ab0 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/nodes/qnode.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/nodes/qnode.cpp b/src/core/nodes/qnode.cpp
index 871eaed39..c26a4ca2a 100644
--- a/src/core/nodes/qnode.cpp
+++ b/src/core/nodes/qnode.cpp
@@ -79,10 +79,6 @@ QNodePrivate::QNodePrivate()
QNodePrivate::~QNodePrivate()
{
- // Disconnect each connection that was stored
- for (auto it = m_destructionConnections.begin(), end = m_destructionConnections.end(); it != end; ++it)
- QObject::disconnect(it.value());
- m_destructionConnections.clear();
}
void QNodePrivate::init(QNode *parent)
@@ -639,10 +635,16 @@ QNode::QNode(QNodePrivate &dd, QNode *parent)
QNode::~QNode()
{
+ Q_D(QNode);
+ // Disconnect each connection that was stored
+ for (auto it = d->m_destructionConnections.begin(), end = d->m_destructionConnections.end(); it != end; ++it)
+ QObject::disconnect(it.value());
+ d->m_destructionConnections.clear();
+
+ Q_EMIT nodeDestroyed();
+
// Notify the backend that the parent lost this node as a child and
// that this node is being destroyed.
- Q_EMIT nodeDestroyed();
- Q_D(QNode);
d->notifyDestructionChangesAndRemoveFromScene();
}