From f5c3576c3b6cb1c31a8dfa3e4113f59bfe40cd71 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 11 Dec 2023 22:48:39 +0000 Subject: [PATCH] screencast: guard pipewire stream validity for queue --- src/portals/Screencopy.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/portals/Screencopy.cpp b/src/portals/Screencopy.cpp index 22ae46f..5f58eec 100644 --- a/src/portals/Screencopy.cpp +++ b/src/portals/Screencopy.cpp @@ -46,7 +46,8 @@ static void wlrOnReady(void* data, zwlr_screencopy_frame_v1* frame, uint32_t tv_ g_pPortalManager->m_sPortals.screencopy->m_pPipewire->enqueue(PSESSION); - g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(PSESSION); + if (g_pPortalManager->m_sPortals.screencopy->m_pPipewire->streamFromSession(PSESSION)) + g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(PSESSION); zwlr_screencopy_frame_v1_destroy(frame); PSESSION->sharingData.frameCallback = nullptr; @@ -1118,6 +1119,11 @@ CPipewireConnection::SPWStream* CPipewireConnection::streamFromSession(CScreenco void CPipewireConnection::enqueue(CScreencopyPortal::SSession* pSession) { const auto PSTREAM = streamFromSession(pSession); + if (!PSTREAM) { + Debug::log(ERR, "[pw] Attempted enqueue on invalid session??"); + return; + } + Debug::log(TRACE, "[pw] enqueue on {}", (void*)PSTREAM); if (!PSTREAM->currentPWBuffer) { @@ -1202,6 +1208,11 @@ void CPipewireConnection::enqueue(CScreencopyPortal::SSession* pSession) { void CPipewireConnection::dequeue(CScreencopyPortal::SSession* pSession) { const auto PSTREAM = streamFromSession(pSession); + if (!PSTREAM) { + Debug::log(ERR, "[pw] Attempted dequeue on invalid session??"); + return; + } + Debug::log(TRACE, "[pw] dequeue on {}", (void*)PSTREAM); const auto PWBUF = pw_stream_dequeue_buffer(PSTREAM->stream);