diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c index 6aecb17da3..d63ce226ed 100644 --- a/gst-libs/gst/base/gstaggregator.c +++ b/gst-libs/gst/base/gstaggregator.c @@ -494,9 +494,13 @@ gst_aggregator_push_eos (GstAggregator * self) GstEvent *event; gst_aggregator_push_mandatory_events (self); - self->priv->send_eos = FALSE; event = gst_event_new_eos (); + + GST_OBJECT_LOCK (self); + self->priv->send_eos = FALSE; gst_event_set_seqnum (event, self->priv->seqnum); + GST_OBJECT_UNLOCK (self); + gst_pad_push_event (self->srcpad, event); } @@ -883,7 +887,10 @@ gst_aggregator_default_sink_event (GstAggregator * self, GST_OBJECT_LOCK (aggpad); gst_event_copy_segment (event, &aggpad->segment); GST_OBJECT_UNLOCK (aggpad); + + GST_OBJECT_LOCK (self); self->priv->seqnum = gst_event_get_seqnum (event); + GST_OBJECT_UNLOCK (self); goto eat; } case GST_EVENT_STREAM_START: @@ -1246,10 +1253,13 @@ gst_aggregator_send_event (GstElement * element, GstEvent * event) gst_event_parse_seek (event, &rate, &fmt, &flags, &start_type, &start, &stop_type, &stop); + + GST_OBJECT_LOCK (self); gst_segment_do_seek (&self->segment, rate, fmt, flags, start_type, start, stop_type, stop, NULL); - self->priv->seqnum = gst_event_get_seqnum (event); + GST_OBJECT_UNLOCK (self); + GST_DEBUG_OBJECT (element, "Storing segment %" GST_PTR_FORMAT, event); } GST_STATE_UNLOCK (element); diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c index 3ec08b974e..2a8a48c4dc 100644 --- a/gst-libs/gst/video/gstvideoaggregator.c +++ b/gst-libs/gst/video/gstvideoaggregator.c @@ -1615,8 +1615,8 @@ gst_videoaggregator_flush (GstAggregator * agg) GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (agg); GST_INFO_OBJECT (agg, "Flushing"); - abs_rate = ABS (agg->segment.rate); GST_OBJECT_LOCK (vagg); + abs_rate = ABS (agg->segment.rate); for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) { GstVideoAggregatorPad *p = l->data;