From 27e766137c7d4c7237896356bd90d6a37aa929e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 9 Mar 2020 20:27:58 +0200 Subject: 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 Part-of: --- plugins/elements/gstidentity.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c index e97fe498e0..b88a7d34aa 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -334,7 +334,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) { @@ -464,6 +464,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); -- cgit v1.2.1