basesrc: Shut down the pad task when the initial seek fails.
authorJan Schmidt <thaytan@noraisin.net>
Fri, 27 Nov 2009 19:16:15 +0000 (20:16 +0100)
committerJan Schmidt <thaytan@noraisin.net>
Fri, 4 Dec 2009 12:41:58 +0000 (12:41 +0000)
Set the pad flushing and stop the pad task when the initial seek fails
during activation. Avoids racy calls into the _create() function when
BaseSrc::stop() has already run.

Fixes: #603059

Also, fix some misspelled comments.

libs/gst/base/gstbasesrc.c

index b46079b..39f7483 100644 (file)
@@ -1376,7 +1376,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock)
     res = FALSE;
   }
 
-  /* if successfull seek, we update our real segment and push
+  /* if the seek was successful, we update our real segment and push
    * out the new segment. */
   if (res) {
     memcpy (&src->segment, &seeksegment, sizeof (GstSegment));
@@ -1421,7 +1421,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock)
 
   src->priv->discont = TRUE;
   src->data.ABI.running = TRUE;
-  /* and restart the task in case it got paused explicitely or by
+  /* and restart the task in case it got paused explicitly or by
    * the FLUSH_START event we pushed out. */
   tres = gst_pad_start_task (src->srcpad, (GstTaskFunction) gst_base_src_loop,
       src->srcpad);
@@ -2863,6 +2863,11 @@ error_start:
 seek_failed:
   {
     GST_ERROR_OBJECT (basesrc, "Failed to perform initial seek");
+    /* flush all */
+    gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL);
+    /* stop the task */
+    gst_pad_stop_task (pad);
+    /* Stop the basesrc */
     gst_base_src_stop (basesrc);
     if (event)
       gst_event_unref (event);