Zebediah Figura : winegstreamer: Avoid leaking GstEvent objects.
Alexandre Julliard
julliard at winehq.org
Mon Jan 18 17:00:36 CST 2021
Module: wine
Branch: master
Commit: 85d81ae9a9ca3e64b33218074f5ff934a8f2718f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=85d81ae9a9ca3e64b33218074f5ff934a8f2718f
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Fri Jan 15 17:59:18 2021 -0600
winegstreamer: Avoid leaking GstEvent objects.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winegstreamer/gstdemux.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 040da3f2ce0..f30264f1c88 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -624,12 +624,14 @@ static gboolean gst_base_src_perform_seek(struct parser *This, GstEvent *event)
static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event)
{
struct parser *This = gst_pad_get_element_private(pad);
+ gboolean ret = TRUE;
TRACE("filter %p, type \"%s\".\n", This, GST_EVENT_TYPE_NAME(event));
switch (event->type) {
case GST_EVENT_SEEK:
- return gst_base_src_perform_seek(This, event);
+ ret = gst_base_src_perform_seek(This, event);
+ break;
case GST_EVENT_FLUSH_START:
EnterCriticalSection(&This->filter.csFilter);
if (This->reader)
@@ -649,13 +651,13 @@ static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event)
case GST_EVENT_RECONFIGURE:
return gst_pad_event_default(pad, parent, event);
}
- return TRUE;
+ gst_event_unref(event);
+ return ret;
}
static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event)
{
struct parser_source *pin = gst_pad_get_element_private(pad);
- gboolean ret;
TRACE("pin %p, type \"%s\".\n", pin, GST_EVENT_TYPE_NAME(event));
@@ -675,7 +677,7 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event)
if (segment->format != GST_FORMAT_TIME)
{
FIXME("Unhandled format \"%s\".\n", gst_format_get_name(segment->format));
- return TRUE;
+ break;
}
gst_segment_copy_into(segment, pin->segment);
@@ -688,14 +690,14 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event)
if (pin->pin.pin.peer)
IPin_NewSegment(pin->pin.pin.peer, pos, stop, rate*applied_rate);
- return TRUE;
+ break;
}
case GST_EVENT_EOS:
if (pin->pin.pin.peer)
IPin_EndOfStream(pin->pin.pin.peer);
else
SetEvent(pin->eos_event);
- return TRUE;
+ break;
case GST_EVENT_FLUSH_START:
if (impl_from_strmbase_filter(pin->pin.pin.filter)->ignore_flush) {
/* gst-plugins-base prior to 1.7 contains a bug which causes
@@ -706,24 +708,28 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event)
* unset the flushing flag to avoid the problem. */
TRACE("Working around gst <1.7 bug, ignoring FLUSH_START\n");
GST_PAD_UNSET_FLUSHING (pad);
- return TRUE;
+ break;
}
if (pin->pin.pin.peer)
IPin_BeginFlush(pin->pin.pin.peer);
- return TRUE;
+ break;
case GST_EVENT_FLUSH_STOP:
gst_segment_init(pin->segment, GST_FORMAT_TIME);
if (pin->pin.pin.peer)
IPin_EndFlush(pin->pin.pin.peer);
- return TRUE;
+ break;
case GST_EVENT_CAPS:
- ret = gst_pad_event_default(pad, parent, event);
+ {
+ gboolean ret = gst_pad_event_default(pad, parent, event);
SetEvent(pin->caps_event);
return ret;
+ }
default:
WARN("Ignoring \"%s\" event.\n", GST_EVENT_TYPE_NAME(event));
return gst_pad_event_default(pad, parent, event);
}
+ gst_event_unref(event);
+ return TRUE;
}
static DWORD CALLBACK push_data(LPVOID iface)
More information about the wine-cvs
mailing list