From 03041842dec6d8be8ae84f2215ac42d51b8bfa32 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 27 Jul 2021 11:49:47 -0400 Subject: [PATCH] debugutils: Only proxy the properties once The needed once call was removed accidently during porting. This was catch by the CI as memory leaks. Related to !2426 Part-of: --- gst/debugutils/gstfakeaudiosink.c | 14 +++++++++++++- gst/debugutils/gstfakevideosink.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/gst/debugutils/gstfakeaudiosink.c b/gst/debugutils/gstfakeaudiosink.c index ef736eb243..5b962a2159 100644 --- a/gst/debugutils/gstfakeaudiosink.c +++ b/gst/debugutils/gstfakeaudiosink.c @@ -62,6 +62,18 @@ G_DEFINE_TYPE_WITH_CODE (GstFakeAudioSink, gst_fake_audio_sink, GST_TYPE_BIN, GST_ELEMENT_REGISTER_DEFINE (fakeaudiosink, "fakeaudiosink", GST_RANK_NONE, gst_fake_audio_sink_get_type ()); +static void +gst_fake_audio_sink_proxy_properties (GstFakeAudioSink * self, + GstElement * child) +{ + static gsize initialized = 0; + + if (g_once_init_enter (&initialized)) { + gst_fake_sink_proxy_properties (GST_ELEMENT_CAST (self), child, PROP_LAST); + g_once_init_leave (&initialized, 1); + } +} + static void gst_fake_audio_sink_init (GstFakeAudioSink * self) { @@ -89,7 +101,7 @@ gst_fake_audio_sink_init (GstFakeAudioSink * self) self->child = child; - gst_fake_sink_proxy_properties (GST_ELEMENT_CAST (self), child, PROP_LAST); + gst_fake_audio_sink_proxy_properties (self, child); } else { g_warning ("Check your GStreamer installation, " "core element 'fakesink' is missing."); diff --git a/gst/debugutils/gstfakevideosink.c b/gst/debugutils/gstfakevideosink.c index 837a765845..571c20a338 100644 --- a/gst/debugutils/gstfakevideosink.c +++ b/gst/debugutils/gstfakevideosink.c @@ -127,6 +127,18 @@ gst_fake_video_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) return TRUE; } +static void +gst_fake_video_sink_proxy_properties (GstFakeVideoSink * self, + GstElement * child) +{ + static gsize initialized = 0; + + if (g_once_init_enter (&initialized)) { + gst_fake_sink_proxy_properties (GST_ELEMENT_CAST (self), child, PROP_LAST); + g_once_init_leave (&initialized, 1); + } +} + static void gst_fake_video_sink_init (GstFakeVideoSink * self) { @@ -157,7 +169,7 @@ gst_fake_video_sink_init (GstFakeVideoSink * self) self->child = child; - gst_fake_sink_proxy_properties (GST_ELEMENT_CAST (self), child, PROP_LAST); + gst_fake_video_sink_proxy_properties (self, child); } else { g_warning ("Check your GStreamer installation, " "core element 'fakesink' is missing.");