From a9144f5313ce8a9af2735209db88bbd6bb096ee1 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Wed, 21 Sep 2022 00:26:38 +0900 Subject: [PATCH] adaptivedemux2: Always wake up loop thread on unpause Otherwise loop thread will sleep forever because GstAdaptiveDemuxLoop.paused flag update is not signalled when loop was marked as stopped already from other thread. Part-of: --- .../ext/adaptivedemux2/gstadaptivedemuxutils.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c index 925f93583a..b27e029248 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c @@ -318,21 +318,23 @@ gst_adaptive_demux_loop_pause_and_lock (GstAdaptiveDemuxLoop * loop) gboolean gst_adaptive_demux_loop_unlock_and_unpause (GstAdaptiveDemuxLoop * loop) { + gboolean stopped; + g_main_context_pop_thread_default (loop->context); g_rec_mutex_unlock (&loop->context_lock); g_mutex_lock (&loop->lock); loop->paused = FALSE; - if (loop->stopped) { - g_mutex_unlock (&loop->lock); - return FALSE; - } + stopped = loop->stopped; - /* Wake up the loop to run again */ + /* Wake up the loop to run again, regardless of stopped state */ g_cond_broadcast (&loop->cond); g_mutex_unlock (&loop->lock); + if (stopped) + return FALSE; + return TRUE; }