From d0c2bec9254ec766c4fe66e7cb8b6b90651f56c1 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 12 Feb 2023 14:39:06 +0400 Subject: [PATCH] Fix crash clearing chats list before histories. --- Telegram/SourceFiles/data/data_session.cpp | 3 +++ Telegram/SourceFiles/dialogs/dialogs_indexed_list.cpp | 1 + Telegram/SourceFiles/dialogs/dialogs_list.h | 4 ++++ Telegram/SourceFiles/dialogs/dialogs_main_list.cpp | 1 + 4 files changed, 9 insertions(+) diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 2a68d0ff2..d8afb561f 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -381,6 +381,9 @@ void Session::clear() { cSetRecentInlineBots(RecentInlineBots()); cSetRecentStickers(RecentStickerPack()); HistoryView::Element::ClearGlobal(); + _contactsNoChatsList.clear(); + _contactsList.clear(); + _chatsList.clear(); _histories->clearAll(); _webpages.clear(); _locations.clear(); diff --git a/Telegram/SourceFiles/dialogs/dialogs_indexed_list.cpp b/Telegram/SourceFiles/dialogs/dialogs_indexed_list.cpp index 132b946eb..2254346cf 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_indexed_list.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_indexed_list.cpp @@ -205,6 +205,7 @@ void IndexedList::remove(Key key, Row *replacedBy) { } void IndexedList::clear() { + _list.clear(); _index.clear(); } diff --git a/Telegram/SourceFiles/dialogs/dialogs_list.h b/Telegram/SourceFiles/dialogs/dialogs_list.h index baf0a3eea..7b1bd84f2 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_list.h +++ b/Telegram/SourceFiles/dialogs/dialogs_list.h @@ -23,6 +23,10 @@ public: List &operator=(List &&other) = default; ~List() = default; + void clear() { + _rows.clear(); + _rowByKey.clear(); + } [[nodiscard]] int size() const { return _rows.size(); } diff --git a/Telegram/SourceFiles/dialogs/dialogs_main_list.cpp b/Telegram/SourceFiles/dialogs/dialogs_main_list.cpp index d0197d391..b9c7b2c7b 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_main_list.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_main_list.cpp @@ -81,6 +81,7 @@ void MainList::clear() { recomputeFullListSize(); }); const auto notifier = unreadStateChangeNotifier(true); + _pinned.clear(); _all.clear(); _unreadState = UnreadState(); _cloudUnreadState = UnreadState();