mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-12 13:46:16 +00:00
core: initialize dive selection after resetting the data
The dive selection was initialized during data-reset. However, this emitted a signal before all data-reset routines were run. Ultimately, this led to access-after-free in the statistics code. Instead, move the select_newest_visible_dive() signal from the divelist-model to the process_loaded_dives() function. There is no point in initializing the selection if the dive data is cleared after all. This change broke closing of the log, because the UI-selection was not reset. Therefore, when clearing the data, clear the selection before proceeding with clearing. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
f299fa37f9
commit
a988e3c135
2 changed files with 4 additions and 2 deletions
|
@ -824,6 +824,9 @@ void process_loaded_dives()
|
||||||
|
|
||||||
/* Inform frontend of reset data. This should reset all the models. */
|
/* Inform frontend of reset data. This should reset all the models. */
|
||||||
emit_reset_signal();
|
emit_reset_signal();
|
||||||
|
|
||||||
|
/* Now that everything is settled, select the newest dive. */
|
||||||
|
select_newest_visible_dive();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1373,7 +1376,7 @@ int get_dive_id_closest_to(timestamp_t when)
|
||||||
void clear_dive_file_data()
|
void clear_dive_file_data()
|
||||||
{
|
{
|
||||||
fulltext_unregister_all();
|
fulltext_unregister_all();
|
||||||
clear_selection();
|
select_single_dive(NULL); // This is propagate up to the UI and clears all the information.
|
||||||
|
|
||||||
while (dive_table.nr)
|
while (dive_table.nr)
|
||||||
delete_single_dive(0);
|
delete_single_dive(0);
|
||||||
|
|
|
@ -499,7 +499,6 @@ void DiveTripModelBase::reset()
|
||||||
uiNotification(tr("finish populating data store"));
|
uiNotification(tr("finish populating data store"));
|
||||||
endResetModel();
|
endResetModel();
|
||||||
uiNotification(tr("setting up internal data structures"));
|
uiNotification(tr("setting up internal data structures"));
|
||||||
initSelection();
|
|
||||||
emit diveListNotifier.numShownChanged();
|
emit diveListNotifier.numShownChanged();
|
||||||
uiNotification(tr("done setting up internal data structures"));
|
uiNotification(tr("done setting up internal data structures"));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue