strmbase: Swap the lock order in IPin::EndFlush().

This more closely resembles the threading model prescribed by the DirectX SDK
documentation. In particular, the page "Flushing Data" recommends that
IPin::BeginFlush() do the following steps in order:

1. take the filter lock
2. signal the streaming thread to complete
3. take the streaming lock, if necessary

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2019-11-28 17:35:41 -06:00 committed by Alexandre Julliard
parent 63a6b308e9
commit a4131ca625
1 changed files with 2 additions and 2 deletions

View File

@ -133,8 +133,8 @@ static HRESULT WINAPI BaseRenderer_InputPin_EndFlush(IPin * iface)
TRACE("iface %p.\n", iface); TRACE("iface %p.\n", iface);
EnterCriticalSection(&pFilter->csRenderLock);
EnterCriticalSection(&pFilter->filter.csFilter); EnterCriticalSection(&pFilter->filter.csFilter);
EnterCriticalSection(&pFilter->csRenderLock);
pFilter->eos = FALSE; pFilter->eos = FALSE;
hr = BaseInputPinImpl_EndFlush(iface); hr = BaseInputPinImpl_EndFlush(iface);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
@ -146,8 +146,8 @@ static HRESULT WINAPI BaseRenderer_InputPin_EndFlush(IPin * iface)
if (pFilter->pFuncsTable->pfnEndFlush) if (pFilter->pFuncsTable->pfnEndFlush)
hr = pFilter->pFuncsTable->pfnEndFlush(pFilter); hr = pFilter->pFuncsTable->pfnEndFlush(pFilter);
} }
LeaveCriticalSection(&pFilter->filter.csFilter);
LeaveCriticalSection(&pFilter->csRenderLock); LeaveCriticalSection(&pFilter->csRenderLock);
LeaveCriticalSection(&pFilter->filter.csFilter);
return hr; return hr;
} }