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);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue