gstpad: Unset EOS event on FLUSH_STOP
authorEdward Hervey <edward.hervey@collabora.co.uk>
Mon, 10 Oct 2011 08:38:12 +0000 (10:38 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Mon, 10 Oct 2011 14:54:40 +0000 (16:54 +0200)
gst/gstpad.c

index 6950f2d..f8026d7 100644 (file)
@@ -4215,6 +4215,14 @@ gst_pad_push_event (GstPad * pad, GstEvent * event)
       break;
     case GST_EVENT_FLUSH_STOP:
       GST_PAD_UNSET_FLUSHING (pad);
+
+      /* Remove sticky EOS events */
+      GST_LOG_OBJECT (pad, "Removing pending EOS events");
+      gst_event_replace (&pad->priv->
+          events[GST_EVENT_STICKY_IDX_TYPE (GST_EVENT_EOS)].pending, NULL);
+      gst_event_replace (&pad->priv->
+          events[GST_EVENT_STICKY_IDX_TYPE (GST_EVENT_EOS)].event, NULL);
+
       if (G_UNLIKELY (GST_PAD_IS_BLOCKED (pad))) {
         GST_LOG_OBJECT (pad, "Pad is blocked, not forwarding flush-stop");
         goto flushed;
@@ -4419,6 +4427,13 @@ gst_pad_send_event (GstPad * pad, GstEvent * event)
         GST_PAD_UNSET_FLUSHING (pad);
         GST_CAT_DEBUG_OBJECT (GST_CAT_EVENT, pad, "cleared flush flag");
       }
+      /* Remove pending EOS events */
+      GST_LOG_OBJECT (pad, "Removing pending EOS events");
+      gst_event_replace (&pad->priv->
+          events[GST_EVENT_STICKY_IDX_TYPE (GST_EVENT_EOS)].pending, NULL);
+      gst_event_replace (&pad->priv->
+          events[GST_EVENT_STICKY_IDX_TYPE (GST_EVENT_EOS)].event, NULL);
+
       GST_OBJECT_UNLOCK (pad);
       /* grab stream lock */
       GST_PAD_STREAM_LOCK (pad);