diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-20 11:26:04 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-20 11:26:04 +0000 |
commit | 79129b100f15da04f5daed58b60017879c123a2f (patch) | |
tree | d9aa97135bb8b74d8522e3df225bef4cabb14b5b /media | |
parent | b371a5651f02bb1f1d6d8b6a7934b1c3c7f371c4 (diff) | |
download | chromium_src-79129b100f15da04f5daed58b60017879c123a2f.zip chromium_src-79129b100f15da04f5daed58b60017879c123a2f.tar.gz chromium_src-79129b100f15da04f5daed58b60017879c123a2f.tar.bz2 |
Don't use callback after Stop().
Fixes a crash where HandleError() attempts to notify the callback
after it has been set to NULL. Also forces a waveInReset() prior
to every waveInClose() in case Start() was never called.
BUG=176550
TEST=none
Review URL: https://chromiumcodereview.appspot.com/12282006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@183472 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/win/wavein_input_win.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/media/audio/win/wavein_input_win.cc b/media/audio/win/wavein_input_win.cc index db1394c..aa0b659 100644 --- a/media/audio/win/wavein_input_win.cc +++ b/media/audio/win/wavein_input_win.cc @@ -183,12 +183,12 @@ void PCMWaveInAudioInputStream::Close() { Stop(); if (wavein_) { - // waveInClose generates a callback with WIM_CLOSE id in the same thread. - MMRESULT res = ::waveInClose(wavein_); - if (res != MMSYSERR_NOERROR) { - HandleError(res); - return; - } + // waveInClose() generates a WIM_CLOSE callback. In case start was never + // called, force a reset to ensure close succeeds. + MMRESULT res = ::waveInReset(wavein_); + DCHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); + res = ::waveInClose(wavein_); + DCHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); state_ = kStateClosed; wavein_ = NULL; FreeBuffers(); |