From: R��mi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/wm_asyncreader.c | 54 ++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 222ed84bd95..4d774cc2c62 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -247,25 +247,29 @@ static DWORD WINAPI async_reader_callback_thread(void *arg) return 0; }
-static HRESULT open_stream(struct async_reader *reader, IWMReaderCallback *callback, void *context) +static HRESULT async_reader_queue_op(struct async_reader *reader, enum async_op_type type, void *context) { - IWMReaderCallback_AddRef((reader->callback = callback)); - reader->context = context; + struct async_op *op;
- reader->running = true; - if (!(reader->callback_thread = CreateThread(NULL, 0, async_reader_callback_thread, reader, 0, NULL))) + EnterCriticalSection(&reader->callback_cs); + + if (!(op = calloc(1, sizeof(*op)))) { - IWMReaderCallback_Release(reader->callback); - reader->running = false; - reader->callback = NULL; - reader->context = NULL; + LeaveCriticalSection(&reader->callback_cs); return E_OUTOFMEMORY; } + op->type = type; + op->new_context = context; + + list_add_tail(&reader->async_ops, &op->entry); + + LeaveCriticalSection(&reader->callback_cs); + WakeConditionVariable(&reader->callback_cv);
return S_OK; }
-static void close_stream(struct async_reader *reader) +static void async_reader_close(struct async_reader *reader) { struct async_op *op, *next;
@@ -283,24 +287,20 @@ static void close_stream(struct async_reader *reader) } }
-static HRESULT async_reader_queue_op(struct async_reader *reader, enum async_op_type type, void *context) +static HRESULT async_reader_open(struct async_reader *reader, IWMReaderCallback *callback, void *context) { - struct async_op *op; - - EnterCriticalSection(&reader->callback_cs); + IWMReaderCallback_AddRef((reader->callback = callback)); + reader->context = context;
- if (!(op = calloc(1, sizeof(*op)))) + reader->running = true; + if (!(reader->callback_thread = CreateThread(NULL, 0, async_reader_callback_thread, reader, 0, NULL))) { - LeaveCriticalSection(&reader->callback_cs); + IWMReaderCallback_Release(reader->callback); + reader->running = false; + reader->callback = NULL; + reader->context = NULL; return E_OUTOFMEMORY; } - op->type = type; - op->new_context = context; - - list_add_tail(&reader->async_ops, &op->entry); - - LeaveCriticalSection(&reader->callback_cs); - WakeConditionVariable(&reader->callback_cv);
return S_OK; } @@ -350,7 +350,7 @@ static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url, }
if (SUCCEEDED(hr = wm_reader_open_file(&reader->reader, url)) - && FAILED(hr = open_stream(reader, callback, context))) + && FAILED(hr = async_reader_open(reader, callback, context))) wm_reader_close(&reader->reader);
LeaveCriticalSection(&reader->reader.cs); @@ -367,7 +367,7 @@ static HRESULT WINAPI WMReader_Close(IWMReader *iface) EnterCriticalSection(&reader->reader.cs);
async_reader_queue_op(reader, ASYNC_OP_CLOSE, NULL); - close_stream(reader); + async_reader_close(reader);
hr = wm_reader_close(&reader->reader); if (reader->callback) @@ -830,7 +830,7 @@ static HRESULT WINAPI WMReaderAdvanced2_OpenStream(IWMReaderAdvanced6 *iface, }
if (SUCCEEDED(hr = wm_reader_open_stream(&reader->reader, stream)) - && FAILED(hr = open_stream(reader, callback, context))) + && FAILED(hr = async_reader_open(reader, callback, context))) wm_reader_close(&reader->reader);
LeaveCriticalSection(&reader->reader.cs); @@ -1691,7 +1691,7 @@ static void async_reader_destroy(struct wm_reader *iface) LeaveCriticalSection(&reader->callback_cs); WakeConditionVariable(&reader->callback_cv);
- close_stream(reader); + async_reader_close(reader);
reader->callback_cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&reader->callback_cs);