identity: Unblock condition variable on FLUSH_START

... and immediately return FLUSHING from the streaming thread instead of
waiting potentially forever.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/516
This commit is contained in:
Sebastian Dröge 2020-03-09 20:27:58 +02:00
parent b55d6c0b02
commit c7ddc5eb79

View file

@ -333,7 +333,7 @@ gst_identity_do_sync (GstIdentity * identity, GstClockTime running_time)
return GST_FLOW_FLUSHING;
}
while (identity->blocked)
while (identity->blocked && !identity->flushing)
g_cond_wait (&identity->blocked_cond, GST_OBJECT_GET_LOCK (identity));
if (identity->flushing) {
@ -463,6 +463,7 @@ gst_identity_sink_event (GstBaseTransform * trans, GstEvent * event)
if (GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_START) {
GST_OBJECT_LOCK (identity);
identity->flushing = TRUE;
g_cond_broadcast (&identity->blocked_cond);
if (identity->clock_id) {
GST_DEBUG_OBJECT (identity, "unlock clock wait");
gst_clock_id_unschedule (identity->clock_id);