From 09b39646b05b856727faabdeabbae514da628074 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Wed, 27 Nov 2019 19:27:14 -0600 Subject: [PATCH] quartz/dsoundrender: Avoid taking the filter lock in IPin::EndOfStream(). IPin::EndOfStream() is called from a streaming thread. The streaming thread should never take the filter lock. Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- 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 fca1a710de2..71851f6b4a8 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 dbb677e9adc..98d27cc83a8 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; }