Zebediah Figura : quartz/dsoundrender: Avoid taking the filter lock in IPin::EndOfStream().

Alexandre Julliard julliard at winehq.org
Thu Nov 28 16:02:20 CST 2019


Module: wine
Branch: master
Commit: 09b39646b05b856727faabdeabbae514da628074
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=09b39646b05b856727faabdeabbae514da628074

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Nov 27 19:27:14 2019 -0600

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 <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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;
 }




More information about the wine-cvs mailing list