| Index: content/renderer/media/webrtc_audio_renderer.cc
|
| diff --git a/content/renderer/media/webrtc_audio_renderer.cc b/content/renderer/media/webrtc_audio_renderer.cc
|
| index c341d0fb3c6b0ad379f81fc01a92becec05f930c..c1c04b8e532acecd2f6e532ea39c9b4c8ec38920 100644
|
| --- a/content/renderer/media/webrtc_audio_renderer.cc
|
| +++ b/content/renderer/media/webrtc_audio_renderer.cc
|
| @@ -422,6 +422,13 @@ void WebRtcAudioRenderer::EnterPauseState() {
|
| void WebRtcAudioRenderer::Stop() {
|
| DVLOG(1) << "WebRtcAudioRenderer::Stop()";
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + // Make sure to stop the sink while _not_ holding the lock since the Render()
|
| + // callback may currently be executing and try to grab the lock while we're
|
| + // stopping the thread on which it runs.
|
| + // Stop the sink before calling RemoveAudioRenderer() to make sure that no
|
| + // more callbacks will be made while the renderer is being removed.
|
| + sink_->Stop();
|
| +
|
| {
|
| base::AutoLock auto_lock(lock_);
|
| if (state_ == UNINITIALIZED)
|
| @@ -436,11 +443,6 @@ void WebRtcAudioRenderer::Stop() {
|
| source_ = NULL;
|
| state_ = UNINITIALIZED;
|
| }
|
| -
|
| - // Make sure to stop the sink while _not_ holding the lock since the Render()
|
| - // callback may currently be executing and try to grab the lock while we're
|
| - // stopping the thread on which it runs.
|
| - sink_->Stop();
|
| }
|
|
|
| void WebRtcAudioRenderer::SetVolume(float volume) {
|
|
|