screencopy: avoid dangling client ptrs on client destroy

This commit is contained in:
Vaxry 2024-02-27 12:23:59 +00:00
parent ffd7217243
commit 21f7f32dc9

View file

@ -95,6 +95,9 @@ static SScreencopyFrame* frameFromResource(wl_resource* resource) {
} }
void CScreencopyProtocolManager::removeClient(CScreencopyClient* client, bool force) { void CScreencopyProtocolManager::removeClient(CScreencopyClient* client, bool force) {
if (!client)
return;
if (!force) { if (!force) {
if (!client || client->ref <= 0) if (!client || client->ref <= 0)
return; return;
@ -104,6 +107,12 @@ void CScreencopyProtocolManager::removeClient(CScreencopyClient* client, bool fo
} }
m_lClients.remove(*client); // TODO: this doesn't get cleaned up after sharing app exits??? m_lClients.remove(*client); // TODO: this doesn't get cleaned up after sharing app exits???
for (auto& f : m_lFrames) {
// avoid dangling ptrs
if (f.client == client)
f.client = nullptr;
}
} }
static void handleManagerResourceDestroy(wl_resource* resource) { static void handleManagerResourceDestroy(wl_resource* resource) {