diff --git a/Telegram/SourceFiles/calls/calls_instance.cpp b/Telegram/SourceFiles/calls/calls_instance.cpp index 0fade207c..24f6f5655 100644 --- a/Telegram/SourceFiles/calls/calls_instance.cpp +++ b/Telegram/SourceFiles/calls/calls_instance.cpp @@ -228,7 +228,7 @@ bool Instance::isQuitPrevent() { if (!_currentCall) { return false; } - LOG(("Calls::Instance prevents quit, saving drafts...")); + LOG(("Calls::Instance prevents quit, hanging up a call...")); return true; } diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index eca9579f9..743d20467 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -103,6 +103,10 @@ Application::~Application() { _window.reset(); _mediaView.reset(); + // This can call writeMap() that serializes AuthSession. + // In case it gets called after authSessionDestroy() we get missing data. + Local::finish(); + // Some MTP requests can be cancelled from data clearing. authSessionDestroy(); @@ -126,7 +130,6 @@ Application::~Application() { Media::Player::finish(_audio.get()); style::stopManager(); - Local::finish(); Global::finish(); ThirdParty::finish(); diff --git a/Telegram/SourceFiles/storage/localstorage.cpp b/Telegram/SourceFiles/storage/localstorage.cpp index 1fe02b343..09935dff5 100644 --- a/Telegram/SourceFiles/storage/localstorage.cpp +++ b/Telegram/SourceFiles/storage/localstorage.cpp @@ -709,6 +709,8 @@ AuthSessionSettings &GetStoredAuthSessionCache() { void _writeMap(WriteMapWhen when = WriteMapWhen::Soon); void _writeLocations(WriteMapWhen when = WriteMapWhen::Soon) { + Expects(_manager != nullptr); + if (when != WriteMapWhen::Now) { _manager->writeLocations(when == WriteMapWhen::Fast); return; @@ -2398,6 +2400,8 @@ ReadMapState _readMap(const QByteArray &pass) { } void _writeMap(WriteMapWhen when) { + Expects(_manager != nullptr); + if (when != WriteMapWhen::Now) { _manager->writeMap(when == WriteMapWhen::Fast); return; @@ -2530,7 +2534,7 @@ void finish() { _writeMap(WriteMapWhen::Now); _manager->finish(); _manager->deleteLater(); - _manager = 0; + _manager = nullptr; delete base::take(_localLoader); } }