[PATCH 1/5] winegstreamer: Fix multiple leaks in failure pathes.
Derek Lesho
dlesho at codeweavers.com
Wed Sep 1 16:05:54 CDT 2021
Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
dlls/winegstreamer/media_source.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 01ab626254a..383afcfce75 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -733,6 +733,9 @@ static HRESULT new_media_stream(struct media_source *source,
object->IMFMediaStream_iface.lpVtbl = &media_stream_vtbl;
object->ref = 1;
+ if (FAILED(hr = MFCreateEventQueue(&object->event_queue)))
+ goto fail;
+
IMFMediaSource_AddRef(&source->IMFMediaSource_iface);
object->parent_source = source;
object->stream_id = stream_id;
@@ -741,9 +744,6 @@ static HRESULT new_media_stream(struct media_source *source,
object->eos = FALSE;
object->wg_stream = wg_stream;
- if (FAILED(hr = MFCreateEventQueue(&object->event_queue)))
- goto fail;
-
TRACE("Created stream object %p.\n", object);
*out_stream = object;
@@ -1211,7 +1211,8 @@ static HRESULT WINAPI media_source_Shutdown(IMFMediaSource *iface)
source->state = SOURCE_SHUTDOWN;
- unix_funcs->wg_parser_disconnect(source->wg_parser);
+ if (source->stream_count)
+ unix_funcs->wg_parser_disconnect(source->wg_parser);
if (source->read_thread)
{
@@ -1231,6 +1232,9 @@ static HRESULT WINAPI media_source_Shutdown(IMFMediaSource *iface)
{
struct media_stream *stream = source->streams[i];
+ if (!stream)
+ continue;
+
stream->state = STREAM_SHUTDOWN;
if (stream->event_queue)
@@ -1245,7 +1249,7 @@ static HRESULT WINAPI media_source_Shutdown(IMFMediaSource *iface)
unix_funcs->wg_parser_destroy(source->wg_parser);
- if (source->stream_count)
+ if (source->streams)
free(source->streams);
if (source->async_commands_queue)
@@ -1353,7 +1357,6 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
if (FAILED(hr = media_stream_init_desc(object->streams[i])))
{
ERR("Failed to finish initialization of media stream %p, hr %x.\n", object->streams[i], hr);
- IMFMediaStream_Release(&object->streams[i]->IMFMediaStream_iface);
goto fail;
}
}
@@ -1392,6 +1395,8 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
fail:
WARN("Failed to construct MFMediaSource, hr %#x.\n", hr);
+ if (object->wg_parser)
+ IMFMediaSource_Shutdown(&object->IMFMediaSource_iface);
free(descriptors);
IMFMediaSource_Release(&object->IMFMediaSource_iface);
return hr;
--
2.33.0
More information about the wine-devel
mailing list