Chromium Code Reviews| Index: media/renderers/audio_renderer_impl.cc |
| diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc |
| index 25f4ef34d83c294bfddd2ee7543e81672291036f..24af1fa904b19af0e5882e24aada5a5694f6daa4 100644 |
| --- a/media/renderers/audio_renderer_impl.cc |
| +++ b/media/renderers/audio_renderer_impl.cc |
| @@ -337,13 +337,21 @@ void AudioRendererImpl::Initialize(DemuxerStream* stream, |
| DCHECK(stream); |
| DCHECK_EQ(stream->type(), DemuxerStream::AUDIO); |
| DCHECK(!init_cb.is_null()); |
| + |
| + base::AutoLock auto_lock(lock_); |
| DCHECK(state_ == kUninitialized || state_ == kFlushed); |
| DCHECK(sink_.get()); |
| // If we are re-initializing playback (e.g. switching media tracks), stop the |
| // sink first. |
| if (state_ == kFlushed) { |
| - sink_->Stop(); |
| + // Release the lock while we are stopping the sink to avoid deadlock if the |
| + // sink needs to wait for the current Render to finish. |
| + auto* sink = sink_.get(); |
| + { |
| + base::AutoUnlock auto_unlock(lock_); |
| + sink->Stop(); |
| + } |
| audio_clock_.reset(); |
|
DaleCurtis
2017/05/17 00:15:52
Instead just delete the CHECK below seems like tha
servolk
2017/05/17 00:23:31
Sure, we can probably do this. But I believe that
servolk
2017/05/17 00:27:12
Done (removed the explicit audio_clock_.reset() he
|
| } |