summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2009-11-27 20:16:15 +0100
committerJan Schmidt <thaytan@noraisin.net>2009-12-04 12:41:58 +0000
commitf49050849061c39dce2635a216c087599c2ab9b5 (patch)
tree052e034c7d5a327f62ed11bfdad4a43687d7c6f7
parent103bd930fccbb31c249db62dba4846a6ab6c7d9c (diff)
basesrc: Shut down the pad task when the initial seek fails.
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.
-rw-r--r--libs/gst/base/gstbasesrc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index b46079b0b0..39f748340c 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -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);