Skip to content
Snippets Groups Projects
Commit a302872e authored by Kateryna Kostiuk's avatar Kateryna Kostiuk Committed by Sébastien Blin
Browse files

media: fix crash when destroying StreamObserver

When StreamObserver is destroyed, observablesFrames_ is removed
from the container while iterating over it. This causes undefined
behavior and leads to a crash on macOS when the call is finished.

GitLab: #827
GitLab: #845
Change-Id: Ifac8ffe7741b8bf32662767a549a5ffb2c580a12
parent b3d8577d
No related branches found
No related tags found
No related merge requests found
...@@ -71,8 +71,13 @@ struct MediaRecorder::StreamObserver : public Observer<std::shared_ptr<MediaFram ...@@ -71,8 +71,13 @@ struct MediaRecorder::StreamObserver : public Observer<std::shared_ptr<MediaFram
~StreamObserver() ~StreamObserver()
{ {
for (auto& obs : observablesFrames_) { while (observablesFrames_.size() > 0) {
obs->detach(this); auto obs = observablesFrames_.begin();
(*obs)->detach(this);
// it should be erased from observablesFrames_ in detach. If it does not happens erase frame to avoid infinite loop.
auto it = observablesFrames_.find(*obs);
if (it != observablesFrames_.end())
observablesFrames_.erase(it);
} }
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment