From a3e593b747fff5e889e176bc3264c30b01caf998 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 16 Apr 2024 19:32:07 +0400 Subject: [PATCH] Fix crash in scheduled messages tear-down. --- .../SourceFiles/data/components/scheduled_messages.cpp | 9 ++++++++- .../SourceFiles/data/components/scheduled_messages.h | 2 ++ Telegram/SourceFiles/data/data_session.cpp | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/data/components/scheduled_messages.cpp b/Telegram/SourceFiles/data/components/scheduled_messages.cpp index c7e2daddc2..92e0da8808 100644 --- a/Telegram/SourceFiles/data/components/scheduled_messages.cpp +++ b/Telegram/SourceFiles/data/components/scheduled_messages.cpp @@ -113,9 +113,16 @@ ScheduledMessages::ScheduledMessages(not_null session) } ScheduledMessages::~ScheduledMessages() { - for (const auto &request : _requests) { + Expects(_data.empty()); + Expects(_requests.empty()); +} + +void ScheduledMessages::clear() { + _lifetime.destroy(); + for (const auto &request : base::take(_requests)) { _session->api().request(request.second.requestId).cancel(); } + base::take(_data); } void ScheduledMessages::clearOldRequests() { diff --git a/Telegram/SourceFiles/data/components/scheduled_messages.h b/Telegram/SourceFiles/data/components/scheduled_messages.h index f1c568d928..90d5b04151 100644 --- a/Telegram/SourceFiles/data/components/scheduled_messages.h +++ b/Telegram/SourceFiles/data/components/scheduled_messages.h @@ -55,6 +55,8 @@ public: [[nodiscard]] Data::MessagesSlice list( not_null topic) const; + void clear(); + private: using OwnedItem = std::unique_ptr; struct List { diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index ed165a0c96..22cea37dbc 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -40,6 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/business/data_business_chatbots.h" #include "data/business/data_business_info.h" #include "data/business/data_shortcut_messages.h" +#include "data/components/scheduled_messages.h" #include "data/stickers/data_stickers.h" #include "data/notify/data_notify_settings.h" #include "data/data_bot_app.h" @@ -394,6 +395,7 @@ void Session::clear() { _histories->unloadAll(); _shortcutMessages = nullptr; + _session->scheduledMessages().clear(); _dependentMessages.clear(); base::take(_messages); base::take(_nonChannelMessages);