Fix AudioDeviceWindowsCore::DoCaptureThread() crash under some rare circumstance.

BUG  = 
TEST = 
Review URL: https://webrtc-codereview.appspot.com/728006

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2600 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
braveyao@webrtc.org 2012-08-13 07:29:24 +00:00
parent a11299648c
commit 1d9521eeed

View File

@ -3568,6 +3568,16 @@ DWORD AudioDeviceWindowsCore::DoRenderThread()
{
_Lock();
// Sanity check to ensure that essential states are not modified
// during the unlocked period.
if (_ptrRenderClient == NULL || _ptrClientOut == NULL)
{
_UnLock();
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
"output state has been modified during unlocked period");
goto Exit;
}
// Get the number of frames of padding (queued up to play) in the endpoint buffer.
UINT32 padding = 0;
hr = _ptrClientOut->GetCurrentPadding(&padding);
@ -4016,6 +4026,16 @@ DWORD AudioDeviceWindowsCore::DoCaptureThread()
_Lock();
// Sanity check to ensure that essential states are not modified
// during the unlocked period.
if (_ptrCaptureClient == NULL || _ptrClientIn == NULL)
{
_UnLock();
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
"input state has been modified during unlocked period");
goto Exit;
}
// Find out how much capture data is available
//
hr = _ptrCaptureClient->GetBuffer(&pData, // packet which is ready to be read by used