summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2008-12-08 22:28:05 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-12-08 22:28:05 +0000
commit55eff822560fc48656ca5bbe591b7edaea4cc537 (patch)
treeca908389c8e1933d463d18183a76f5b54ceced8c /plugins
parentb90bef8ee54634fb63f95c9256e5b47f65d85eda (diff)
plugins/elements/gsttee.c: Check for changed pads-list before checking the last returned
Original commit message from CVS: * plugins/elements/gsttee.c: (gst_tee_handle_buffer): Check for changed pads-list before checking the last returned GstFlowReturn because the pad could have been removed and we need to ignore the value in that case.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/elements/gsttee.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c
index c160de3366..b22cb185c1 100644
--- a/plugins/elements/gsttee.c
+++ b/plugins/elements/gsttee.c
@@ -593,6 +593,18 @@ restart:
GST_LOG_OBJECT (tee, "pad already pushed with %s",
gst_flow_get_name (ret));
}
+
+ /* before we go combining the return value, check if the pad list is still
+ * the same. It could be possible that the pad we just pushed was removed
+ * and the return value it not valid anymore */
+ if (GST_ELEMENT_CAST (tee)->pads_cookie != cookie) {
+ GST_LOG_OBJECT (tee, "pad list changed");
+ /* the list of pads changed, restart iteration. Pads that we already
+ * pushed on and are still in the new list, will not be pushed on
+ * again. */
+ goto restart;
+ }
+
/* stop pushing more buffers when we have a fatal error */
if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED)
goto error;
@@ -602,14 +614,6 @@ restart:
GST_LOG_OBJECT (tee, "Replacing ret val %d with %d", cret, ret);
cret = ret;
}
-
- if (GST_ELEMENT_CAST (tee)->pads_cookie != cookie) {
- GST_LOG_OBJECT (tee, "pad list changed");
- /* the list of pads changed, restart iteration. Pads that we already
- * pushed on and are still in the new list, will not be pushed on
- * again. */
- goto restart;
- }
pads = g_list_next (pads);
}
GST_OBJECT_UNLOCK (tee);