winegstreamer: Release callback and context in async_reader_close.

This commit is contained in:
Rémi Bernon 2022-08-22 19:21:01 +02:00 committed by Alexandre Julliard
parent b600c85dae
commit 8f482eba13

View file

@ -263,24 +263,29 @@ static void async_reader_close(struct async_reader *reader)
list_remove(&op->entry);
free(op);
}
if (reader->callback)
IWMReaderCallback_Release(reader->callback);
reader->callback = NULL;
reader->context = NULL;
}
static HRESULT async_reader_open(struct async_reader *reader, IWMReaderCallback *callback, void *context)
{
HRESULT hr = E_OUTOFMEMORY;
IWMReaderCallback_AddRef((reader->callback = callback));
reader->context = context;
reader->running = true;
if (!(reader->callback_thread = CreateThread(NULL, 0, async_reader_callback_thread, reader, 0, NULL)))
{
IWMReaderCallback_Release(reader->callback);
reader->running = false;
reader->callback = NULL;
reader->context = NULL;
return E_OUTOFMEMORY;
}
goto error;
return S_OK;
error:
async_reader_close(reader);
return hr;
}
static HRESULT async_reader_queue_op(struct async_reader *reader, enum async_op_type type, void *context)
@ -365,9 +370,6 @@ static HRESULT WINAPI WMReader_Close(IWMReader *iface)
async_reader_close(reader);
hr = wm_reader_close(&reader->reader);
if (reader->callback)
IWMReaderCallback_Release(reader->callback);
reader->callback = NULL;
LeaveCriticalSection(&reader->reader.cs);
@ -1693,9 +1695,6 @@ static void async_reader_destroy(struct wm_reader *iface)
wm_reader_close(&reader->reader);
if (reader->callback)
IWMReaderCallback_Release(reader->callback);
wm_reader_cleanup(&reader->reader);
free(reader);
}