aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Jan Mulder <jlmulder@xs4all.nl>2017-06-08 13:38:52 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-06-12 09:49:05 -0700
commita7288cc912267415196cfa956b7813752748c35c (patch)
tree0930b1b52ddcf6fef28bfda01b907652ac3d86ed
parent22e40063f173e381ecf9385be0d1facc69770f02 (diff)
downloadsubsurface-a7288cc912267415196cfa956b7813752748c35c.tar.gz
QML UI: do not crash on selecting dive computers
For reasons unknown to me, the DCDeviceData instance was freed way too early, and used afterwards, obviously resulting in a SIGSEGV. This commit creates the DCDeviceData as a direct child of the QMLManager instance, ensuring it does not get freed prematurely. Signed-off-by: Jan Mulder <jlmulder@xs4all.nl> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--core/downloadfromdcthread.cpp4
-rw-r--r--mobile-widgets/qmlmanager.cpp3
-rw-r--r--mobile-widgets/qmlmanager.h2
3 files changed, 6 insertions, 3 deletions
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp
index bd8a637f1..9583eff15 100644
--- a/core/downloadfromdcthread.cpp
+++ b/core/downloadfromdcthread.cpp
@@ -16,11 +16,11 @@ static QString str_error(const char *fmt, ...)
return str;
}
-DownloadThread::DownloadThread() : m_data(new DCDeviceData())
+DownloadThread::DownloadThread()
{
+ m_data = DCDeviceData::instance();
}
-
void DownloadThread::run()
{
auto internalData = m_data->internalData();
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 96bdab51e..02345342f 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -91,7 +91,8 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
m_updateSelectedDive(-1),
m_selectedDiveTimestamp(0),
m_credentialStatus(UNKNOWN),
- alreadySaving(false)
+ alreadySaving(false),
+ m_device_data(new DCDeviceData(this))
{
#if defined(BT_SUPPORT)
// ensure that we start the BTDiscovery - this should be triggered by the export of the class
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index a41ee509a..a4dbb8b56 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -18,6 +18,7 @@
#include "core/btdiscovery.h"
#include "core/gpslocation.h"
+#include "core/downloadfromdcthread.h"
#include "qt-models/divelistmodel.h"
class QMLManager : public QObject {
@@ -204,6 +205,7 @@ private:
bool checkDepth(DiveObjectHelper *myDive, struct dive *d, QString depth);
bool currentGitLocalOnly;
bool m_showPin;
+ DCDeviceData *m_device_data;
signals:
void cloudUserNameChanged();