Fix crash on quit in sponsored messages.

This commit is contained in:
John Preston 2024-04-24 16:35:05 +04:00
parent 17b7db6219
commit 3da51b1bc9
3 changed files with 16 additions and 3 deletions

View file

@ -37,9 +37,20 @@ SponsoredMessages::SponsoredMessages(not_null<Main::Session*> session)
} }
SponsoredMessages::~SponsoredMessages() { SponsoredMessages::~SponsoredMessages() {
for (const auto &request : _requests) { Expects(_data.empty());
Expects(_requests.empty());
Expects(_viewRequests.empty());
}
void SponsoredMessages::clear() {
_lifetime.destroy();
for (const auto &request : base::take(_requests)) {
_session->api().request(request.second.requestId).cancel(); _session->api().request(request.second.requestId).cancel();
} }
for (const auto &request : base::take(_viewRequests)) {
_session->api().request(request.second.requestId).cancel();
}
base::take(_data);
} }
void SponsoredMessages::clearOldRequests() { void SponsoredMessages::clearOldRequests() {

View file

@ -80,8 +80,6 @@ public:
}; };
using RandomId = QByteArray; using RandomId = QByteArray;
explicit SponsoredMessages(not_null<Main::Session*> session); explicit SponsoredMessages(not_null<Main::Session*> session);
SponsoredMessages(const SponsoredMessages &other) = delete;
SponsoredMessages &operator=(const SponsoredMessages &other) = delete;
~SponsoredMessages(); ~SponsoredMessages();
[[nodiscard]] bool canHaveFor(not_null<History*> history) const; [[nodiscard]] bool canHaveFor(not_null<History*> history) const;
@ -104,6 +102,8 @@ public:
[[nodiscard]] auto createReportCallback(const FullMsgId &fullId) [[nodiscard]] auto createReportCallback(const FullMsgId &fullId)
-> Fn<void(SponsoredReportResult::Id, Fn<void(SponsoredReportResult)>)>; -> Fn<void(SponsoredReportResult::Id, Fn<void(SponsoredReportResult)>)>;
void clear();
private: private:
using OwnedItem = std::unique_ptr<HistoryItem, HistoryItem::Destroyer>; using OwnedItem = std::unique_ptr<HistoryItem, HistoryItem::Destroyer>;
struct Entry { struct Entry {

View file

@ -41,6 +41,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/business/data_business_info.h" #include "data/business/data_business_info.h"
#include "data/business/data_shortcut_messages.h" #include "data/business/data_shortcut_messages.h"
#include "data/components/scheduled_messages.h" #include "data/components/scheduled_messages.h"
#include "data/components/sponsored_messages.h"
#include "data/stickers/data_stickers.h" #include "data/stickers/data_stickers.h"
#include "data/notify/data_notify_settings.h" #include "data/notify/data_notify_settings.h"
#include "data/data_bot_app.h" #include "data/data_bot_app.h"
@ -396,6 +397,7 @@ void Session::clear() {
_histories->unloadAll(); _histories->unloadAll();
_shortcutMessages = nullptr; _shortcutMessages = nullptr;
_session->scheduledMessages().clear(); _session->scheduledMessages().clear();
_session->sponsoredMessages().clear();
_dependentMessages.clear(); _dependentMessages.clear();
base::take(_messages); base::take(_messages);
base::take(_nonChannelMessages); base::take(_nonChannelMessages);