From d1e37864acc8cfa7d311e27d211d2b6651cd7293 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 25 Feb 2017 20:55:11 +0300 Subject: [PATCH] Closed beta 1000014001: fixed crash in MTP destructor. Some of MTP::Instance::Private fields access _instance in destructors. All that cleanup should be performed before the Instance::~Instance() (which invalidates _private) is called. --- Telegram/SourceFiles/mtproto/mtp_instance.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 55aa692e0..fb7fe79c6 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -102,8 +102,7 @@ public: void completedKeyDestroy(ShiftedDcId shiftedDcId); void clearKilledSessions(); - - ~Private(); + void prepareToDestroy(); private: bool hasAuthorization(); @@ -1189,7 +1188,7 @@ void Instance::Private::clearGlobalHandlers() { setSessionResetHandler(base::lambda()); } -Instance::Private::~Private() { +void Instance::Private::prepareToDestroy() { for (auto &session : base::take(_sessions)) { session.second->kill(); } @@ -1371,6 +1370,8 @@ void Instance::onClearKilledSessions() { _private->clearKilledSessions(); } -Instance::~Instance() = default; +Instance::~Instance() { + _private->prepareToDestroy(); +} } // namespace MTP