diff options
Diffstat (limited to 'src/managers/screenshare/ScreenshareManager.cpp')
| -rw-r--r-- | src/managers/screenshare/ScreenshareManager.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/managers/screenshare/ScreenshareManager.cpp b/src/managers/screenshare/ScreenshareManager.cpp index 6a0f5b95..6b5c0ade 100644 --- a/src/managers/screenshare/ScreenshareManager.cpp +++ b/src/managers/screenshare/ScreenshareManager.cpp @@ -140,16 +140,18 @@ WP<CScreenshareSession> CScreenshareManager::getManagedSession(eScreenshareType m_sessions.emplace_back(session); it = m_managedSessions.emplace(m_managedSessions.end(), makeUnique<SManagedSession>(std::move(session))); - } - auto& session = *it; + auto& managed = *it; + managed->stoppedListener = managed->m_session->m_events.stopped.listen([managed = WP<SManagedSession>(managed)]() { + if (!managed) + return; - session->stoppedListener = session->m_session->m_events.stopped.listen([session = WP<SManagedSession>(session)]() { - if (!session.expired()) - std::erase_if(Screenshare::mgr()->m_managedSessions, [&](const auto& s) { return s && s->m_session.get() == session->m_session.get(); }); - }); + const auto& session = managed->m_session; + std::erase_if(Screenshare::mgr()->m_managedSessions, [&session](const auto& s) { return s && s->m_session == session; }); + }); + } - return session->m_session; + return (*it)->m_session; } bool CScreenshareManager::isOutputBeingSSd(PHLMONITOR monitor) { |
