From f3e2a29cbda8e58fb7a5c669b77c99adac5cac4d Mon Sep 17 00:00:00 2001 From: Dw9 Date: Thu, 19 Sep 2024 20:16:16 +0800 Subject: [PATCH] Fix crashes where iterators may be invalid (#3920) Fix: #3885 --- src/Common/MediaSink.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Common/MediaSink.cpp b/src/Common/MediaSink.cpp index b0155f87..cca80e2e 100644 --- a/src/Common/MediaSink.cpp +++ b/src/Common/MediaSink.cpp @@ -117,19 +117,17 @@ void MediaSink::checkTrackIfReady() { // 等待音频超时时间 GET_CONFIG(uint32_t, kWaitAudioTrackDataMS, General::kWaitAudioTrackDataMS); if (_max_track_size > 1) { - for (auto it = _track_map.begin(); it != _track_map.end(); ++it) { - if (it->second.first->getTrackType() != TrackAudio) { - continue; - } - if (_ticker.elapsedTime() > kWaitAudioTrackDataMS && !it->second.second) { + for (auto it = _track_map.begin(); it != _track_map.end();) { + if (it->second.first->getTrackType() == TrackAudio && _ticker.elapsedTime() > kWaitAudioTrackDataMS && !it->second.second) { // 音频超时且完全没收到音频数据,忽略音频 auto index = it->second.first->getIndex(); - WarnL << "audio track " << "index " << index << " codec " << it->second.first->getCodecName() << " receive no data for long " + WarnL << "Audio track index " << index << " codec " << it->second.first->getCodecName() << " receive no data for long " << _ticker.elapsedTime() << "ms. Ignore it!"; it = _track_map.erase(it); _max_track_size -= 1; _track_ready_callback.erase(index); - continue; + } else { + ++it; } } }