IPin::EndOfStream() is called from a streaming thread. The streaming thread should never take the filter lock.
Signed-off-by: Zebediah Figura z.figura12@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; }