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