gstadder: Don't forget to free pending events on flush/dispose.
authorEdward Hervey <bilboed@bilboed.com>
Mon, 20 Jul 2009 08:53:11 +0000 (10:53 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Mon, 20 Jul 2009 10:42:32 +0000 (12:42 +0200)
Fixes #588747

gst/adder/gstadder.c

index b51c2c6..d81cb45 100644 (file)
@@ -781,6 +781,12 @@ gst_adder_sink_event (GstPad * pad, GstEvent * event)
       GST_OBJECT_LOCK (adder->collect);
       adder->segment_pending = TRUE;
       adder->flush_stop_pending = FALSE;
+      /* Clear pending tags */
+      if (adder->pending_events) {
+        g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL);
+        g_list_free (adder->pending_events);
+        adder->pending_events = NULL;
+      }
       GST_OBJECT_UNLOCK (adder->collect);
       break;
     case GST_EVENT_TAG:
@@ -881,6 +887,11 @@ gst_adder_dispose (GObject * object)
     adder->collect = NULL;
   }
   gst_caps_replace (&adder->filter_caps, NULL);
+  if (adder->pending_events) {
+    g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL);
+    g_list_free (adder->pending_events);
+    adder->pending_events = NULL;
+  }
 
   G_OBJECT_CLASS (parent_class)->dispose (object);
 }