Fix a possible crash in Go to Message on macOS.

Fixes #26273.

This crash happens with a very deep stack trace that is caused by
destroying shared media layer on Go to Message click, which starts
destroying Media::ListWidget, which destroys Ui::PopupMenu, which is
a window, so when it destructs it triggers a sync repaint of the main
window (by a system event), which tries to render the new messages slice,
which starts a photo download, which calls an item repaint in Data::Session,
and the semi-destroyed Media::ListWidget is still subscribed to the
item repaint requests and tries to repaint and crashes there.

The fix is to destroy all session-related subscriptions before the PopupMenu.
This commit is contained in:
John Preston 2023-05-24 20:18:28 +04:00
parent 7877463468
commit f671897a4d
1 changed files with 2 additions and 1 deletions

View File

@ -295,7 +295,6 @@ private:
bool _wasSelectedText = false; // was some text selected in current drag action
const std::unique_ptr<DateBadge> _dateBadge;
base::flat_map<not_null<Main::Session*>, rpl::lifetime> _trackedSessions;
base::unique_qptr<Ui::PopupMenu> _contextMenu;
rpl::event_stream<> _checkForHide;
@ -305,6 +304,8 @@ private:
QPoint _trippleClickPoint;
crl::time _trippleClickStartTime = 0;
base::flat_map<not_null<Main::Session*>, rpl::lifetime> _trackedSessions;
};
} // namespace Media