identity: Unblock condition variable on FLUSH_START
authorSebastian Dröge <sebastian@centricular.com>
Mon, 9 Mar 2020 18:27:58 +0000 (20:27 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 9 Mar 2020 18:27:58 +0000 (20:27 +0200)
... 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

index 319f4e3..0c5f468 100644 (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);