From f6b020002606d116ee4152548f1e906f3c3b4b9d Mon Sep 17 00:00:00 2001 From: Shixin Zeng Date: Tue, 20 Jul 2010 09:25:20 -0500 Subject: [PATCH] tests: make *_get_type() in tests thread safe Even if it shouldn't be needed here. See #623491. --- tests/check/gst/gstobject.c | 12 +++++++----- tests/check/gst/gstpreset.c | 8 +++++--- tests/check/libs/controller.c | 8 +++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tests/check/gst/gstobject.c b/tests/check/gst/gstobject.c index 85d2d07c78..d5956db315 100644 --- a/tests/check/gst/gstobject.c +++ b/tests/check/gst/gstobject.c @@ -42,15 +42,16 @@ struct _GstFakeObjectClass GstObjectClass parent_class; }; -static GType _gst_fake_object_type = 0; - //static GstObjectClass *parent_class = NULL; //static guint gst_fake_object_signals[LAST_SIGNAL] = { 0 }; static GType gst_fake_object_get_type (void) { - if (!_gst_fake_object_type) { + static volatile gsize fake_object_type = 0; + + if (g_once_init_enter (&fake_object_type)) { + GType type; static const GTypeInfo fake_object_info = { sizeof (GstFakeObjectClass), NULL, //gst_fake_object_base_class_init, @@ -64,10 +65,11 @@ gst_fake_object_get_type (void) NULL }; - _gst_fake_object_type = g_type_register_static (GST_TYPE_OBJECT, + type = g_type_register_static (GST_TYPE_OBJECT, "GstFakeObject", &fake_object_info, 0); + g_once_init_leave (&fake_object_type, type); } - return _gst_fake_object_type; + return fake_object_type; } #ifndef HAVE_OSX diff --git a/tests/check/gst/gstpreset.c b/tests/check/gst/gstpreset.c index da3087ff59..02d5bb7704 100644 --- a/tests/check/gst/gstpreset.c +++ b/tests/check/gst/gstpreset.c @@ -112,9 +112,10 @@ gst_preset_test_base_init (GstPresetTestClass * klass) static GType gst_preset_test_get_type (void) { - static GType type = 0; + static volatile gsize preset_test_type = 0; - if (type == 0) { + if (g_once_init_enter (&preset_test_type)) { + GType type; const GTypeInfo info = { sizeof (GstPresetTestClass), (GBaseInitFunc) gst_preset_test_base_init, /* base_init */ @@ -134,8 +135,9 @@ gst_preset_test_get_type (void) }; type = g_type_register_static (GST_TYPE_ELEMENT, "GstPresetTest", &info, 0); g_type_add_interface_static (type, GST_TYPE_PRESET, &preset_interface_info); + g_once_init_leave (&preset_test_type, type); } - return type; + return preset_test_type; } static gboolean diff --git a/tests/check/libs/controller.c b/tests/check/libs/controller.c index 7b708fbd49..05cd432522 100644 --- a/tests/check/libs/controller.c +++ b/tests/check/libs/controller.c @@ -191,9 +191,10 @@ gst_test_mono_source_base_init (GstTestMonoSourceClass * klass) static GType gst_test_mono_source_get_type (void) { - static GType type = 0; + static volatile gsize test_mono_source_type = 0; - if (type == 0) { + if (g_once_init_enter (&test_mono_source_type)) { + GType type; static const GTypeInfo info = { (guint16) sizeof (GstTestMonoSourceClass), (GBaseInitFunc) gst_test_mono_source_base_init, // base_init @@ -209,8 +210,9 @@ gst_test_mono_source_get_type (void) type = g_type_register_static (GST_TYPE_ELEMENT, "GstTestMonoSource", &info, 0); + g_once_init_leave (&test_mono_source_type, type); } - return type; + return test_mono_source_type; } /* so we don't have to paste the gst_element_register into 50 places below */