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:
parent
63a6b308e9
commit
a4131ca625
|
@ -133,8 +133,8 @@ static HRESULT WINAPI BaseRenderer_InputPin_EndFlush(IPin * iface)
|
|||
|
||||
TRACE("iface %p.\n", iface);
|
||||
|
||||
EnterCriticalSection(&pFilter->csRenderLock);
|
||||
EnterCriticalSection(&pFilter->filter.csFilter);
|
||||
EnterCriticalSection(&pFilter->csRenderLock);
|
||||
pFilter->eos = FALSE;
|
||||
hr = BaseInputPinImpl_EndFlush(iface);
|
||||
if (SUCCEEDED(hr))
|
||||
|
@ -146,8 +146,8 @@ static HRESULT WINAPI BaseRenderer_InputPin_EndFlush(IPin * iface)
|
|||
if (pFilter->pFuncsTable->pfnEndFlush)
|
||||
hr = pFilter->pFuncsTable->pfnEndFlush(pFilter);
|
||||
}
|
||||
LeaveCriticalSection(&pFilter->filter.csFilter);
|
||||
LeaveCriticalSection(&pFilter->csRenderLock);
|
||||
LeaveCriticalSection(&pFilter->filter.csFilter);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue