summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-20 11:26:04 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-20 11:26:04 +0000
commit79129b100f15da04f5daed58b60017879c123a2f (patch)
treed9aa97135bb8b74d8522e3df225bef4cabb14b5b /media
parentb371a5651f02bb1f1d6d8b6a7934b1c3c7f371c4 (diff)
downloadchromium_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.cc12
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();