From b7e662f40081b24d7a95190bc63710f979cc9287 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Thu, 4 Aug 2022 23:54:27 +1000 Subject: [PATCH] adaptivedemux2: Fix a small race on shutdown Make sure gst_adaptive_demux_loop_cancel_call() never tries to operate on an invalidated main context. Make sure to clear the main context pointer while holding the lock, and to check it in gst_adaptive_demux_loop_cancel_call() 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 994a94b945..de0a7e2281 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemuxutils.c @@ -215,11 +215,12 @@ _gst_adaptive_demux_loop_thread (GstAdaptiveDemuxLoop * loop) loop->loop = NULL; g_cond_broadcast (&loop->cond); - g_mutex_unlock (&loop->lock); g_main_context_unref (loop->context); loop->context = NULL; + g_mutex_unlock (&loop->lock); + gst_adaptive_demux_loop_unref (loop); return NULL; @@ -380,12 +381,13 @@ gst_adaptive_demux_loop_call_delayed (GstAdaptiveDemuxLoop * loop, void gst_adaptive_demux_loop_cancel_call (GstAdaptiveDemuxLoop * loop, guint cb_id) { - GSource *s; g_mutex_lock (&loop->lock); - s = g_main_context_find_source_by_id (loop->context, cb_id); - if (s) - g_source_destroy (s); + if (loop->context) { + GSource *s = g_main_context_find_source_by_id (loop->context, cb_id); + if (s) + g_source_destroy (s); + } g_mutex_unlock (&loop->lock); }