Clean buffers before closing the input device.
authorLev Zelenskiy <lev.zelenskiy@nokia.com>
Tue, 26 Jun 2012 02:45:58 +0000 (12:45 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 27 Jun 2012 06:11:59 +0000 (08:11 +0200)
Input device handle is invalid after waveInClose()
QTBUG-24119

Change-Id: I8276e56766684efd26b78dc019ff871ebac28408
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
src/multimedia/audio/qaudioinput_win32_p.cpp

index 836924a..0af49e0 100644 (file)
@@ -335,6 +335,13 @@ void QAudioInputPrivate::close()
 
     deviceState = QAudio::StoppedState;
     waveInReset(hWaveIn);
+
+    mutex.lock();
+    for (int i=0; i<waveFreeBlockCount; i++)
+        waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
+    freeBlocks(waveBlocks);
+    mutex.unlock();
+
     waveInClose(hWaveIn);
 
     int count = 0;
@@ -342,12 +349,6 @@ void QAudioInputPrivate::close()
         count++;
         Sleep(10);
     }
-
-    mutex.lock();
-    for(int i=0; i<waveFreeBlockCount; i++)
-        waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
-    freeBlocks(waveBlocks);
-    mutex.unlock();
 }
 
 int QAudioInputPrivate::bytesReady() const