mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 20:05:38 +00:00
collectpads: Use private pad list in set_flushing_unlocked
pads->data is the public list. It is dynamically rebuilt at each call to check_collected, in check_pads to be specific. When you add a pad and collectpads have been started, it is not added to the public list. Thus there exists a possible race where : 1) You would add a pad to collectpads while running. 2) You set collectpads to flushing before check_collected has been called again -> the pad is not set to flushing 3) the pad starts pushing data as downstream might not be prepared, in the case of adder it then returns FLOW_FLUSHING. 4) elements like demuxers, when they get a FLOW_FLUSHING, stop their tasks, never to be seen again. https://bugzilla.gnome.org/show_bug.cgi?id=708636
This commit is contained in:
parent
cba26c9ed9
commit
c79e5bbcad
1 changed files with 1 additions and 1 deletions
|
@ -735,7 +735,7 @@ gst_collect_pads_set_flushing_unlocked (GstCollectPads * pads,
|
|||
GSList *walk = NULL;
|
||||
|
||||
/* Update the pads flushing flag */
|
||||
for (walk = pads->data; walk; walk = g_slist_next (walk)) {
|
||||
for (walk = pads->priv->pad_list; walk; walk = g_slist_next (walk)) {
|
||||
GstCollectData *cdata = walk->data;
|
||||
|
||||
if (GST_IS_PAD (cdata->pad)) {
|
||||
|
|
Loading…
Reference in a new issue