From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winegstreamer/wm_asyncreader.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index ed19955a531..61ca6ce9681 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -64,6 +64,8 @@ struct async_reader IWMReaderTypeNegotiation IWMReaderTypeNegotiation_iface; IReferenceClock IReferenceClock_iface; + CRITICAL_SECTION cs; + IWMReaderCallbackAdvanced *callback_advanced; IWMReaderCallback *callback; void *context; @@ -389,11 +391,13 @@ static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url, TRACE("reader %p, url %s, callback %p, context %p.\n", reader, debugstr_w(url), callback, context); + EnterCriticalSection(&reader->cs); EnterCriticalSection(&reader->reader.cs); if (reader->reader.wg_parser) { LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); WARN("Stream is already open; returning E_UNEXPECTED.\n"); return E_UNEXPECTED; } @@ -403,6 +407,7 @@ static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url, wm_reader_close(&reader->reader); LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); return hr; } @@ -413,7 +418,7 @@ static HRESULT WINAPI WMReader_Close(IWMReader *iface) TRACE("reader %p.\n", reader); - EnterCriticalSection(&reader->reader.cs); + EnterCriticalSection(&reader->cs); if (SUCCEEDED(hr = async_reader_queue_op(reader, ASYNC_OP_CLOSE, NULL))) { @@ -421,7 +426,7 @@ static HRESULT WINAPI WMReader_Close(IWMReader *iface) hr = wm_reader_close(&reader->reader); } - LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); return hr; } @@ -488,14 +493,14 @@ static HRESULT WINAPI WMReader_Start(IWMReader *iface, if (rate != 1.0f) FIXME("Ignoring rate %.8e.\n", rate); - EnterCriticalSection(&reader->reader.cs); + EnterCriticalSection(&reader->cs); if (!reader->callback_thread) hr = NS_E_INVALID_REQUEST; else hr = async_reader_queue_op(reader, ASYNC_OP_START, &data); - LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); return hr; } @@ -507,14 +512,14 @@ static HRESULT WINAPI WMReader_Stop(IWMReader *iface) TRACE("reader %p.\n", reader); - EnterCriticalSection(&reader->reader.cs); + EnterCriticalSection(&reader->cs); if (!reader->callback_thread) hr = E_UNEXPECTED; else hr = async_reader_queue_op(reader, ASYNC_OP_STOP, NULL); - LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); return hr; } @@ -866,11 +871,13 @@ static HRESULT WINAPI WMReaderAdvanced2_OpenStream(IWMReaderAdvanced6 *iface, TRACE("reader %p, stream %p, callback %p, context %p.\n", reader, stream, callback, context); + EnterCriticalSection(&reader->cs); EnterCriticalSection(&reader->reader.cs); if (reader->reader.wg_parser) { LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); WARN("Stream is already open; returning E_UNEXPECTED.\n"); return E_UNEXPECTED; } @@ -880,6 +887,7 @@ static HRESULT WINAPI WMReaderAdvanced2_OpenStream(IWMReaderAdvanced6 *iface, wm_reader_close(&reader->reader); LeaveCriticalSection(&reader->reader.cs); + LeaveCriticalSection(&reader->cs); return hr; } @@ -1741,6 +1749,8 @@ static void async_reader_destroy(struct wm_reader *iface) reader->callback_cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&reader->callback_cs); + reader->cs.DebugInfo->Spare[0] = 0; + DeleteCriticalSection(&reader->cs); wm_reader_close(&reader->reader); @@ -1773,6 +1783,8 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader) object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl; object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl; + InitializeCriticalSection(&object->cs); + object->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": async_reader.cs"); InitializeCriticalSection(&object->callback_cs); object->callback_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": async_reader.callback_cs"); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/843