diff options
author | Jan Mulder <jlmulder@xs4all.nl> | 2018-01-07 16:08:25 +0100 |
---|---|---|
committer | Jan Mulder <jlmulder@xs4all.nl> | 2018-01-10 20:34:16 +0100 |
commit | 6193aef9ac7678a66748d6cd410e387024cc16cb (patch) | |
tree | a756cf65533cf8ef87628faa93e2414a97144e05 /qt-models/divelistmodel.cpp | |
parent | 0096284a8ef292012f2feab67db460057be6ad39 (diff) | |
download | subsurface-6193aef9ac7678a66748d6cd410e387024cc16cb.tar.gz |
mobile: fix crash on delete dive from divelist
This is a somewhat hacky commit. For a very long time, the delete
from the divelist on mobile crashed. That is, not always for anyone,
but for me almost consistently. This commit tries to solve it.
I found that trying to save the delete immediately after removing
data from the underlying model seemed to cause the crash. Hacking
around, I found that a simple beginResetModel/endResetModel between
the delete of the underlying model data and actual save is
sufficient to solve the crash.
The big question is, why does this all work? I suspect some of race
condition between deleting model data, and giving the QML engine
the opportunity to do its thing.
This is also related to issue #311, but that is not implemented
here.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Diffstat (limited to 'qt-models/divelistmodel.cpp')
-rw-r--r-- | qt-models/divelistmodel.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp index b28bd58a3..b9fb99b1b 100644 --- a/qt-models/divelistmodel.cpp +++ b/qt-models/divelistmodel.cpp @@ -108,6 +108,16 @@ void DiveListModel::clear() } } +void DiveListModel::resetInternalData() +{ + // this is a hack. There is a long standing issue, that seems related to a + // sync problem between QML engine and underlying model data. It causes delete + // from divelist (on mobile) to crash. But not always. This function is part of + // an attempt to fix this. See commit. + beginResetModel(); + endResetModel(); +} + int DiveListModel::rowCount(const QModelIndex &) const { return m_dives.count(); |