From a7288cc912267415196cfa956b7813752748c35c Mon Sep 17 00:00:00 2001 From: Jan Mulder Date: Thu, 8 Jun 2017 13:38:52 +0200 Subject: 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 Signed-off-by: Dirk Hohndel --- core/downloadfromdcthread.cpp | 4 ++-- mobile-widgets/qmlmanager.cpp | 3 ++- mobile-widgets/qmlmanager.h | 2 ++ 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(); -- cgit v1.2.3-70-g09d2