diff options
Diffstat (limited to 'src')
5 files changed, 12 insertions, 0 deletions
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 220a1a0c..7568fd30 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -77,6 +77,10 @@ AbstractDeclarative::~AbstractDeclarative() disconnect(this, 0, this, 0); checkWindowList(0); + // Make sure not deleting locked mutex + QMutexLocker locker(&m_mutex); + locker.unlock(); + m_nodeMutex.clear(); } @@ -518,6 +522,8 @@ void AbstractDeclarative::itemChange(ItemChange change, const ItemChangeData & v void AbstractDeclarative::updateWindowParameters() { + const QMutexLocker locker(&m_mutex); + // Update the device pixel ratio, window size and bounding box QQuickWindow *win = window(); if (win && !m_controller.isNull()) { diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index ebdf7609..1a9c4e81 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -235,6 +235,8 @@ public: void setMargin(qreal margin); qreal margin() const; + QMutex *mutex() { return &m_mutex; } + public Q_SLOTS: virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0; virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0; @@ -302,6 +304,7 @@ private: QThread *m_mainThread; QThread *m_contextThread; bool m_runningInDesigner; + QMutex m_mutex; }; Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::SelectionFlags) Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::OptimizationHints) diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index 2e3964f9..ca1d3f60 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -51,6 +51,7 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) DeclarativeBars::~DeclarativeBars() { QMutexLocker locker(m_nodeMutex.data()); + const QMutexLocker locker2(mutex()); delete m_barsController; } diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 0b7efdb4..29e56a79 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -49,6 +49,7 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) DeclarativeScatter::~DeclarativeScatter() { QMutexLocker locker(m_nodeMutex.data()); + const QMutexLocker locker2(mutex()); delete m_scatterController; } diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index 4bfa7873..2e210246 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -51,6 +51,7 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) DeclarativeSurface::~DeclarativeSurface() { QMutexLocker locker(m_nodeMutex.data()); + const QMutexLocker locker2(mutex()); delete m_surfaceController; } |