[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