aggregator: Protect exported pad members with the pad's object lock

https://bugzilla.gnome.org/show_bug.cgi?id=742684
This commit is contained in:
Olivier Crête 2015-01-14 14:38:09 -05:00 committed by Thibault Saunier
parent cc3f418516
commit 68ac6438f0
2 changed files with 9 additions and 1 deletions

View file

@ -191,8 +191,10 @@ gst_aggregator_pad_flush (GstAggregatorPad * aggpad, GstAggregator * agg)
{
GstAggregatorPadClass *klass = GST_AGGREGATOR_PAD_GET_CLASS (aggpad);
PAD_LOCK (aggpad);
aggpad->eos = FALSE;
aggpad->priv->flushing = FALSE;
PAD_UNLOCK (aggpad);
if (klass->flush)
return klass->flush (aggpad, agg);
@ -359,9 +361,14 @@ gst_aggregator_check_pads_ready (GstAggregator * self)
for (l = sinkpads; l != NULL; l = l->next) {
pad = l->data;
if (pad->buffer == NULL && !pad->eos)
PAD_LOCK (pad);
if (pad->buffer == NULL && !pad->eos) {
GST_OBJECT_UNLOCK (pad);
goto pad_not_ready;
}
PAD_UNLOCK (pad);
}
GST_OBJECT_UNLOCK (self);
GST_LOG_OBJECT (self, "pads are ready");

View file

@ -69,6 +69,7 @@ struct _GstAggregatorPad
{
GstPad parent;
/* Protected by the pad's object lock */
GstBuffer * buffer;
GstSegment segment;
gboolean eos;