[PATCH 1/5] quartz/dsoundrender: Avoid taking the filter lock in IPin::EndOfStream().
Zebediah Figura
z.figura12 at gmail.com
Wed Nov 27 19:27:14 CST 2019
IPin::EndOfStream() is called from a streaming thread. The streaming thread
should never take the filter lock.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/dsoundrender.c | 2 --
dlls/strmbase/renderer.c | 2 --
2 files changed, 4 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index fca1a710de..71851f6b4a 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -236,11 +236,9 @@ static HRESULT DSoundRender_HandleEndOfStream(DSoundRenderImpl *This)
break;
This->in_loop = 1;
- LeaveCriticalSection(&This->renderer.filter.csFilter);
LeaveCriticalSection(&This->renderer.csRenderLock);
WaitForSingleObject(This->renderer.flush_event, 10);
EnterCriticalSection(&This->renderer.csRenderLock);
- EnterCriticalSection(&This->renderer.filter.csFilter);
This->in_loop = 0;
}
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index dbb677e9ad..98d27cc83a 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -88,13 +88,11 @@ static HRESULT WINAPI BaseRenderer_InputPin_EndOfStream(IPin * iface)
TRACE("iface %p.\n", iface);
EnterCriticalSection(&pFilter->csRenderLock);
- EnterCriticalSection(&pFilter->filter.csFilter);
pFilter->eos = TRUE;
if (pFilter->pFuncsTable->pfnEndOfStream)
hr = pFilter->pFuncsTable->pfnEndOfStream(pFilter);
else
hr = BaseRendererImpl_EndOfStream(pFilter);
- LeaveCriticalSection(&pFilter->filter.csFilter);
LeaveCriticalSection(&pFilter->csRenderLock);
return hr;
}
--
2.24.0
More information about the wine-devel
mailing list