diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2008-12-08 22:28:05 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2008-12-08 22:28:05 +0000 |
commit | 55eff822560fc48656ca5bbe591b7edaea4cc537 (patch) | |
tree | ca908389c8e1933d463d18183a76f5b54ceced8c /plugins | |
parent | b90bef8ee54634fb63f95c9256e5b47f65d85eda (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.c | 20 |
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); |