diff --git a/src/tox_av_voip_model.cpp b/src/tox_av_voip_model.cpp index e1f74dfe..5f32ff1b 100644 --- a/src/tox_av_voip_model.cpp +++ b/src/tox_av_voip_model.cpp @@ -290,18 +290,24 @@ void ToxAVVoIPModel::destroySession(ObjectHandle session) { _video_sources.erase(it_vsrc); } } - if (session.all_of()) { - std::lock_guard lg{_audio_sinks_mutex}; - auto it = std::find(_audio_sinks.cbegin(), _audio_sinks.cend(), session.get()); - if (it != _audio_sinks.cend()) { - _audio_sinks.erase(it); + if (session.all_of()) { + auto asink = session.get().o; + if (asink.all_of()) { + std::lock_guard lg{_audio_sinks_mutex}; + auto it = std::find(_audio_sinks.cbegin(), _audio_sinks.cend(), asink.get()); + if (it != _audio_sinks.cend()) { + _audio_sinks.erase(it); + } } } - if (session.all_of()) { - std::lock_guard lg{_video_sinks_mutex}; - auto it = std::find(_video_sinks.cbegin(), _video_sinks.cend(), session.get()); - if (it != _video_sinks.cend()) { - _video_sinks.erase(it); + if (session.all_of()) { + auto vsink = session.get().o; + if (vsink.all_of()) { + std::lock_guard lg{_video_sinks_mutex}; + auto it = std::find(_video_sinks.cbegin(), _video_sinks.cend(), vsink.get()); + if (it != _video_sinks.cend()) { + _video_sinks.erase(it); + } } } @@ -331,7 +337,7 @@ void ToxAVVoIPModel::destroySession(ObjectHandle session) { void ToxAVVoIPModel::audio_thread_tick(void) { //for (const auto& [oc, asink] : _os.registry().view().each()) { std::lock_guard lg{_audio_sinks_mutex}; - for (const auto& asink : _audio_sinks) { + for (const auto* asink : _audio_sinks) { if (!asink->_writer) { continue; } @@ -369,7 +375,7 @@ void ToxAVVoIPModel::audio_thread_tick(void) { void ToxAVVoIPModel::video_thread_tick(void) { //for (const auto& [oc, vsink] : _os.registry().view().each()) { std::lock_guard lg{_video_sinks_mutex}; - for (const auto& vsink : _video_sinks) { + for (const auto* vsink : _video_sinks) { if (!vsink->_writer) { continue; }