diff options
author | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-26 04:38:27 +0000 |
---|---|---|
committer | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-26 04:38:27 +0000 |
commit | b60b28ab42544ed277ceebe1cb3f299a44b4c4cb (patch) | |
tree | 9dc8cecead537916da6b1f20a8d250fae88963de /media/audio/linux/alsa_output_unittest.cc | |
parent | a5d3dad7b804f843c74bd0bb661b1311192b760e (diff) | |
download | chromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.zip chromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.tar.gz chromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.tar.bz2 |
Better handle error condition in ALSA output.
Linux-only change.
We were not stopped scheduled WritePacket() when stopping the stream.
In normal situation that is Ok, WritePacket() would immediately return
is state is "stopped", and we would delete scheduled task when deleting
the stream, but problem can happen if some call leaves the stream in
the error state -- WritePacket() was checking only for "stopped" state.
Fix is simple -- WritePacket() should bail out if state is anything
but "playing".
BUG=47927
TEST=On Linux we should not see crash 'crashed_thread_function_name.contains:"AudioRendererBase::GetPlaybackRate()"'
Review URL: https://chromiumcodereview.appspot.com/10421019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139183 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/linux/alsa_output_unittest.cc')
-rw-r--r-- | media/audio/linux/alsa_output_unittest.cc | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc index 5f9b4e7..5d38859 100644 --- a/media/audio/linux/alsa_output_unittest.cc +++ b/media/audio/linux/alsa_output_unittest.cc @@ -473,6 +473,8 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) { TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) { AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); InitBuffer(test_stream); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); // Nothing should happen. Don't set any expectations and Our strict mocks // should verify most of this. @@ -486,6 +488,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) { TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) { AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); InitBuffer(test_stream); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); // Write a little less than half the data. int written = packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1; @@ -510,6 +514,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) { TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); InitBuffer(test_stream); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); // Fail due to a recoverable error and see that PcmRecover code path // continues normally. @@ -540,6 +546,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { TEST_F(AlsaPcmOutputStreamTest, WritePacket_StopStream) { AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); InitBuffer(test_stream); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); + test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); // No expectations set on the strict mock because nothing should be called. test_stream->stop_stream_ = true; @@ -790,7 +798,6 @@ TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite) { AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); -DLOG(WARNING) << test_stream->state(); InitBuffer(test_stream); DLOG(WARNING) << test_stream->state(); EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) |