From 89fc20931bf3ac78c354b313682c54aaad3707f5 Mon Sep 17 00:00:00 2001 From: Aleksandr Slobodeniuk Date: Thu, 6 Oct 2022 16:23:56 +0200 Subject: [PATCH] decodebin3: allow to call "dispose" multiple times https://docs.gtk.org/gobject/concepts.html#reference-counts-and-cycles Part-of: --- .../gst-plugins-base/gst/playback/gstdecodebin3.c | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c b/subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c index 05db874..9b387ac 100644 --- a/subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c +++ b/subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c @@ -657,19 +657,34 @@ gst_decodebin3_dispose (GObject * object) GstDecodebin3 *dbin = (GstDecodebin3 *) object; GList *walk, *next; - if (dbin->factories) + if (dbin->factories) { gst_plugin_feature_list_free (dbin->factories); - if (dbin->decoder_factories) + dbin->factories = NULL; + } + if (dbin->decoder_factories) { g_list_free (dbin->decoder_factories); - if (dbin->decodable_factories) + dbin->decoder_factories = NULL; + } + if (dbin->decodable_factories) { g_list_free (dbin->decodable_factories); + dbin->decodable_factories = NULL; + } g_list_free_full (dbin->requested_selection, g_free); g_list_free_full (dbin->active_selection, g_free); g_list_free (dbin->to_activate); g_list_free (dbin->pending_select_streams); + + dbin->requested_selection = NULL; + dbin->active_selection = NULL; + dbin->to_activate = NULL; + dbin->pending_select_streams = NULL; + g_clear_object (&dbin->collection); - free_input (dbin, dbin->main_input); + if (dbin->main_input) { + free_input (dbin, dbin->main_input); + dbin->main_input = NULL; + } for (walk = dbin->other_inputs; walk; walk = next) { DecodebinInput *input = walk->data; -- 2.7.4