From c7ddc5eb7976a207d6f07aef52f39a430030aed4 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: [PATCH] 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 --- 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 319f4e3c82..0c5f4683e6 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -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);