decodebin3: protect internal reset with SELECTION_LOCK
authorThéo Maillart <tmaillart@freebox.fr>
Thu, 26 Sep 2024 09:29:08 +0000 (11:29 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 3 Oct 2024 09:42:03 +0000 (09:42 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7605>

subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c

index 8124f91a769f6f478247a0144387172b0c1c8dda..92547188cb83d87310cd0e03312081d94e832967 100644 (file)
@@ -760,6 +760,7 @@ gst_decodebin3_reset (GstDecodebin3 * dbin)
 
   GST_DEBUG_OBJECT (dbin, "Resetting");
 
+  SELECTION_LOCK (dbin);
   /* Free output streams */
   g_list_free_full (dbin->output_streams,
       (GDestroyNotify) db_output_stream_free);
@@ -773,6 +774,7 @@ gst_decodebin3_reset (GstDecodebin3 * dbin)
   g_list_free (dbin->slots);
   dbin->slots = NULL;
   dbin->current_group_id = GST_GROUP_ID_INVALID;
+  SELECTION_UNLOCK (dbin);
 
   /* Reset the inputs */
   gst_decodebin_input_reset (dbin->main_input);
@@ -783,12 +785,15 @@ gst_decodebin3_reset (GstDecodebin3 * dbin)
   /* Reset multiqueue to default interleave */
   g_object_set (dbin->multiqueue, "min-interleave-time",
       dbin->default_mq_min_interleave, NULL);
+
+  SELECTION_LOCK (dbin);
   dbin->current_mq_min_interleave = dbin->default_mq_min_interleave;
   dbin->upstream_handles_selection = FALSE;
 
   g_list_free_full (dbin->collections, (GDestroyNotify) db_collection_free);
   dbin->collections = NULL;
   dbin->input_collection = dbin->output_collection = NULL;
+  SELECTION_UNLOCK (dbin);
 }
 
 static void