summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml2
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualizationqml2')
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp6
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h3
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp1
-rw-r--r--src/datavisualizationqml2/declarativescatter.cpp1
-rw-r--r--src/datavisualizationqml2/declarativesurface.cpp1
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;
}