ext/metadata/gstbasemetadata.c: Avoid deadlock during pad activation.

Original commit message from CVS:
* ext/metadata/gstbasemetadata.c:
Avoid deadlock during pad activation.
Fixes #561241.
This commit is contained in:
Alessandro Decina 2008-11-18 16:52:11 +00:00
parent 6edbddd2d9
commit a49918b152
2 changed files with 20 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2008-11-18 Alessandro Decina <alessandro.d@gmail.com>
* ext/metadata/gstbasemetadata.c:
Avoid deadlock during pad activation.
Fixes #561241.
2008-11-17 David Schleef <ds@schleef.org>
* gst/qtmux/gstqtmux.c: Quiet a debugging message that I recently

View file

@ -1807,16 +1807,24 @@ gst_base_metadata_sink_activate (GstPad * pad)
}
if (ret) {
gst_pad_activate_pull (pad, FALSE);
gst_pad_activate_push (filter->srcpad, FALSE);
if (!gst_pad_is_active (pad)) {
ret = gst_pad_activate_push (filter->srcpad, TRUE);
ret = ret && gst_pad_activate_push (pad, TRUE);
GstActivateMode mode;
/* in gst_base_metadata_pull_range_parse() we could have triggered
* negotiation and plugged new downstream elements.
* If GST_PAD_ACTIVATE_MODE (filter->srcpad) is GST_ACTIVATE_PULL it means
* that downstream is active in pull mode so we don't deactivate pull mode.
*/
GST_OBJECT_LOCK (filter->srcpad);
mode = GST_PAD_ACTIVATE_MODE (filter->srcpad);
GST_OBJECT_UNLOCK (filter->srcpad);
if (mode != GST_ACTIVATE_PULL) {
/* change from PULL to PUSH */
gst_pad_activate_push (pad, TRUE);
}
}
return ret;
}
static gboolean