Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index e7a4740b566..58d8e0e2248 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1014,14 +1014,14 @@ static DWORD CALLBACK stream_thread(void *arg)
TRACE("Starting streaming thread for pin %p.\n", pin);
- for (;;) + while (filter->streaming) { struct parser_event event;
EnterCriticalSection(&pin->flushing_cs); EnterCriticalSection(&filter->cs);
- while (filter->streaming && !filter->flushing && pin->event.type == PARSER_EVENT_NONE) + while (!filter->flushing && pin->event.type == PARSER_EVENT_NONE) SleepConditionVariableCS(&pin->event_cv, &filter->cs, INFINITE);
if (filter->flushing) @@ -1032,13 +1032,6 @@ static DWORD CALLBACK stream_thread(void *arg) continue; }
- if (!filter->streaming) - { - LeaveCriticalSection(&filter->cs); - LeaveCriticalSection(&pin->flushing_cs); - break; - } - if (!pin->event.type) { LeaveCriticalSection(&filter->cs); @@ -1586,8 +1579,9 @@ static HRESULT parser_init_stream(struct strmbase_filter *iface) if (!filter->container) return S_OK;
- EnterCriticalSection(&filter->cs); filter->streaming = true; + EnterCriticalSection(&filter->cs); + filter->flushing = false; LeaveCriticalSection(&filter->cs);
/* DirectShow retains the old seek positions, but resets to them every time @@ -1625,8 +1619,9 @@ static HRESULT parser_cleanup_stream(struct strmbase_filter *iface) if (!filter->container) return S_OK;
- EnterCriticalSection(&filter->cs); filter->streaming = false; + EnterCriticalSection(&filter->cs); + filter->flushing = true; LeaveCriticalSection(&filter->cs);
for (i = 0; i < filter->source_count; ++i) @@ -1870,6 +1865,7 @@ static void parser_init_common(struct parser *object) object->error_event = CreateEventW(NULL, TRUE, FALSE, NULL); InitializeCriticalSection(&object->cs); object->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": parser.cs"); + object->flushing = true; }
HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out)