collectpads: reliably go to eos. Fixes #574160
authorStefan Kost <ensonic@users.sf.net>
Wed, 4 Mar 2009 19:21:56 +0000 (21:21 +0200)
committerStefan Kost <ensonic@users.sf.net>
Fri, 6 Mar 2009 19:50:19 +0000 (21:50 +0200)
Update collectpads status when removing pads.

libs/gst/base/gstcollectpads.c

index a024abc..b6bf668 100644 (file)
@@ -82,6 +82,7 @@ GST_BOILERPLATE (GstCollectPads, gst_collect_pads, GstObject, GST_TYPE_OBJECT);
 static void gst_collect_pads_clear (GstCollectPads * pads,
     GstCollectData * data);
 static GstFlowReturn gst_collect_pads_chain (GstPad * pad, GstBuffer * buffer);
+static GstFlowReturn gst_collect_pads_check_collected (GstCollectPads * pads);
 static gboolean gst_collect_pads_event (GstPad * pad, GstEvent * event);
 static void gst_collect_pads_finalize (GObject * object);
 static void gst_collect_pads_init (GstCollectPads * pads,
@@ -419,6 +420,11 @@ gst_collect_pads_remove_pad (GstCollectPads * pads, GstPad * pad)
 
   GST_COLLECT_PADS_PAD_UNLOCK (pads);
 
+  GST_OBJECT_LOCK (pad);
+  /* make sure we go to eos on last pad */
+  gst_collect_pads_check_collected (pads);
+  GST_OBJECT_UNLOCK (pad);
+
   return TRUE;
 
 unknown_pad: