Module: wine Branch: master Commit: a4131ca625cf7b1c76ba8f230dda7c6b9d682bc3 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a4131ca625cf7b1c76ba8f230...
Author: Zebediah Figura z.figura12@gmail.com Date: Thu Nov 28 17:35:41 2019 -0600
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
---
dlls/strmbase/renderer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index 0ef9c5b225..cacbb90e59 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -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; }