gstdeviceprovider: fix leaking hidden providers
authorRobert Rosengren <robertr@axis.com>
Mon, 18 Nov 2024 07:47:12 +0000 (08:47 +0100)
committerBackport Bot <gitlab-backport-bot@gstreamer-foundation.org>
Mon, 18 Nov 2024 11:10:37 +0000 (11:10 +0000)
Free list of hidden providers upon stop and dispose.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7915>

subprojects/gstreamer/gst/gstdeviceprovider.c

index f073ede51b754f0cc689f53448444ac01a6f8c64..896721ba07175cf60f2eeccb529e4262834d113a 100644 (file)
@@ -180,8 +180,8 @@ gst_device_provider_dispose (GObject * object)
   gst_object_replace ((GstObject **) & provider->priv->bus, NULL);
 
   GST_OBJECT_LOCK (provider);
-  g_list_free_full (provider->devices, (GDestroyNotify) gst_object_unparent);
-  provider->devices = NULL;
+  g_clear_list (&provider->devices, (GDestroyNotify) gst_object_unparent);
+  g_clear_list (&provider->priv->hidden_providers, (GDestroyNotify) g_free);
   GST_OBJECT_UNLOCK (provider);
 
   G_OBJECT_CLASS (gst_device_provider_parent_class)->dispose (object);
@@ -535,8 +535,8 @@ gst_device_provider_stop (GstDeviceProvider * provider)
     if (klass->stop)
       klass->stop (provider);
     GST_OBJECT_LOCK (provider);
-    g_list_free_full (provider->devices, (GDestroyNotify) gst_object_unparent);
-    provider->devices = NULL;
+    g_clear_list (&provider->devices, (GDestroyNotify) gst_object_unparent);
+    g_clear_list (&provider->priv->hidden_providers, (GDestroyNotify) g_free);
     GST_OBJECT_UNLOCK (provider);
   } else if (provider->priv->started_count < 1) {
     g_critical