From 5037fcdbdc867c542661b0b31debd8580777c30e Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sun, 22 Sep 2019 22:00:29 +0200 Subject: Import: avoid model inconsistency in DiveImportedModel::recordDives() DiveImportedModel::recordDives() called add_imported_dives(). But that actually consumes the dive and dive-site tables. Which in turn will lead to an inconsistent model. Properly reset the model by using the consumeTables() function. Signed-off-by: Berthold Stoeger --- qt-models/diveimportedmodel.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'qt-models') diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp index 7e70ce0a7..10d1d74d2 100644 --- a/qt-models/diveimportedmodel.cpp +++ b/qt-models/diveimportedmodel.cpp @@ -199,14 +199,21 @@ void DiveImportedModel::deleteDeselected() // Note: this function is only used from mobile - perhaps move it there or unify. void DiveImportedModel::recordDives() { + deleteDeselected(); + if (diveTable.nr == 0) // nothing to do, just exit return; - deleteDeselected(); + // Consume the tables. They will be consumed by add_imported_dives() anyway. + // But let's do it in a controlled way with a proper model-reset so that the + // model doesn't become inconsistent. + std::pair tables = consumeTables(); // TODO: Might want to let the user select IMPORT_ADD_TO_NEW_TRIP - add_imported_dives(&diveTable, nullptr, &sitesTable, IMPORT_PREFER_IMPORTED | IMPORT_IS_DOWNLOADED); + add_imported_dives(&tables.first, nullptr, &tables.second, IMPORT_PREFER_IMPORTED | IMPORT_IS_DOWNLOADED); + free(tables.first.dives); + free(tables.second.dive_sites); } QHash DiveImportedModel::roleNames() const { -- cgit v1.2.3-70-g09d2