Zebediah Figura : strmbase: Acquire the streaming lock in sink_EndOfStream().
Alexandre Julliard
julliard at winehq.org
Wed Jan 20 16:58:42 CST 2021
Module: wine
Branch: master
Commit: 480ece6a15a7a4bccee8b21022911e5e984906b3
URL: https://source.winehq.org/git/wine.git/?a=commit;h=480ece6a15a7a4bccee8b21022911e5e984906b3
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Tue Jan 19 21:35:35 2021 -0600
strmbase: Acquire the streaming lock in sink_EndOfStream().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/dsoundrender.c | 3 ---
dlls/strmbase/pin.c | 21 +++++++++++++--------
dlls/strmbase/renderer.c | 3 ---
3 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index 3615193269f..6c6732e468a 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -465,8 +465,6 @@ static HRESULT dsound_render_sink_eos(struct strmbase_sink *iface)
void *buffer;
DWORD size;
- EnterCriticalSection(&filter->filter.stream_cs);
-
filter->eos = TRUE;
if (graph && SUCCEEDED(IFilterGraph_QueryInterface(graph,
@@ -485,7 +483,6 @@ static HRESULT dsound_render_sink_eos(struct strmbase_sink *iface)
memset(buffer, 0, size);
IDirectSoundBuffer_Unlock(filter->dsbuffer, buffer, size, NULL, 0);
- LeaveCriticalSection(&filter->filter.stream_cs);
return S_OK;
}
diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index 54f8662e7ff..e815f7b82df 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -926,21 +926,26 @@ static HRESULT deliver_endofstream(IPin* pin, LPVOID unused)
static HRESULT WINAPI sink_EndOfStream(IPin *iface)
{
- struct strmbase_sink *This = impl_sink_from_IPin(iface);
+ struct strmbase_sink *pin = impl_sink_from_IPin(iface);
HRESULT hr = S_OK;
- TRACE("pin %p %s:%s.\n", This, debugstr_w(This->pin.filter->name), debugstr_w(This->pin.name));
+ TRACE("pin %p %s:%s.\n", pin, debugstr_w(pin->pin.filter->name), debugstr_w(pin->pin.name));
- if (This->pFuncsTable->sink_eos)
- return This->pFuncsTable->sink_eos(This);
+ if (pin->pFuncsTable->sink_eos)
+ {
+ EnterCriticalSection(&pin->pin.filter->stream_cs);
+ hr = pin->pFuncsTable->sink_eos(pin);
+ LeaveCriticalSection(&pin->pin.filter->stream_cs);
+ return hr;
+ }
- EnterCriticalSection(&This->pin.filter->filter_cs);
- if (This->flushing)
+ EnterCriticalSection(&pin->pin.filter->filter_cs);
+ if (pin->flushing)
hr = S_FALSE;
- LeaveCriticalSection(&This->pin.filter->filter_cs);
+ LeaveCriticalSection(&pin->pin.filter->filter_cs);
if (hr == S_OK)
- hr = SendFurther(This, deliver_endofstream, NULL);
+ hr = SendFurther(pin, deliver_endofstream, NULL);
return hr;
}
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index b890ab72bf6..8da3d81de61 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -268,8 +268,6 @@ static HRESULT sink_eos(struct strmbase_sink *iface)
IFilterGraph *graph = filter->filter.graph;
IMediaEventSink *event_sink;
- EnterCriticalSection(&filter->filter.stream_cs);
-
filter->eos = TRUE;
if (graph && SUCCEEDED(IFilterGraph_QueryInterface(graph,
@@ -282,7 +280,6 @@ static HRESULT sink_eos(struct strmbase_sink *iface)
strmbase_passthrough_eos(&filter->passthrough);
SetEvent(filter->state_event);
- LeaveCriticalSection(&filter->filter.stream_cs);
return S_OK;
}
More information about the wine-cvs
mailing list