aggregator: Reset EOS flag after receiving a stream-start event

And also don't assert that there are no buffers queued up when handling
an EOS event. The pad's streaming thread might've already received a new
stream-start event and queued up a buffer in the meantime.

This still leaves a race condition where the srcpad task sees all pads
in EOS state and finishes the stream, while shortly afterwards a pad
might receive a stream-start event again, but this doesn't seem to be
solveable with the current aggregator design.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2772>
This commit is contained in:
Sebastian Dröge 2022-07-18 15:46:21 +03:00 committed by Tim-Philipp Müller
parent 0e143a00dd
commit 4a8e37d22e

View file

@ -1705,7 +1705,6 @@ gst_aggregator_default_sink_event (GstAggregator * self,
{
SRC_LOCK (self);
PAD_LOCK (aggpad);
g_assert (aggpad->priv->num_buffers == 0);
aggpad->priv->eos = TRUE;
PAD_UNLOCK (aggpad);
SRC_BROADCAST (self);
@ -1732,6 +1731,9 @@ gst_aggregator_default_sink_event (GstAggregator * self,
}
case GST_EVENT_STREAM_START:
{
PAD_LOCK (aggpad);
aggpad->priv->eos = FALSE;
PAD_UNLOCK (aggpad);
goto eat;
}
case GST_EVENT_GAP: