From: Tim-Philipp Müller Date: Sun, 2 Jan 2011 17:07:19 +0000 (+0000) Subject: jack: make get_type functions thread-safe X-Git-Tag: 1.19.3~509^2~7916^2~147 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f5083a17cf48c0197ceac71c52d46d1831b3388;p=platform%2Fupstream%2Fgstreamer.git jack: make get_type functions thread-safe Because we can (shouldn't be needed with other workarounds still there). --- diff --git a/ext/jack/gstjack.c b/ext/jack/gstjack.c index 371a9e9..74b8ddf 100644 --- a/ext/jack/gstjack.c +++ b/ext/jack/gstjack.c @@ -27,22 +27,23 @@ GType gst_jack_connect_get_type (void) { - static GType jack_connect_type = 0; - static const GEnumValue jack_connect[] = { - {GST_JACK_CONNECT_NONE, - "Don't automatically connect ports to physical ports", "none"}, - {GST_JACK_CONNECT_AUTO, - "Automatically connect ports to physical ports", "auto"}, - {GST_JACK_CONNECT_AUTO_FORCED, - "Automatically connect ports to as many physical ports as possible", - "auto-forced"}, - {0, NULL, NULL}, - }; + static volatile gsize jack_connect_type = 0; - if (!jack_connect_type) { - jack_connect_type = g_enum_register_static ("GstJackConnect", jack_connect); + if (g_once_init_enter (&jack_connect_type)) { + static const GEnumValue jack_connect_enums[] = { + {GST_JACK_CONNECT_NONE, + "Don't automatically connect ports to physical ports", "none"}, + {GST_JACK_CONNECT_AUTO, + "Automatically connect ports to physical ports", "auto"}, + {GST_JACK_CONNECT_AUTO_FORCED, + "Automatically connect ports to as many physical ports as possible", + "auto-forced"}, + {0, NULL, NULL}, + }; + GType tmp = g_enum_register_static ("GstJackConnect", jack_connect_enums); + g_once_init_leave (&jack_connect_type, tmp); } - return jack_connect_type; + return (GType) jack_connect_type; } @@ -63,16 +64,17 @@ gst_jack_client_free (gpointer jclient) GType gst_jack_client_get_type (void) { - static GType type; /* 0 */ + static volatile gsize jack_client_type = 0; - if (type == 0) { + if (g_once_init_enter (&jack_client_type)) { /* hackish, but makes it show up nicely in gst-inspect */ - type = g_boxed_type_register_static ("JackClient", + GType tmp = g_boxed_type_register_static ("JackClient", (GBoxedCopyFunc) gst_jack_client_copy, (GBoxedFreeFunc) gst_jack_client_free); + g_once_init_leave (&jack_client_type, tmp); } - return type; + return (GType) jack_client_type; } static gboolean diff --git a/ext/jack/gstjackaudiosink.c b/ext/jack/gstjackaudiosink.c index 32bf1af..ea75b9c 100644 --- a/ext/jack/gstjackaudiosink.c +++ b/ext/jack/gstjackaudiosink.c @@ -129,9 +129,9 @@ gst_jack_audio_sink_free_channels (GstJackAudioSink * sink) static GType gst_jack_ring_buffer_get_type (void) { - static GType ringbuffer_type = 0; + static volatile gsize ringbuffer_type = 0; - if (!ringbuffer_type) { + if (g_once_init_enter (&ringbuffer_type)) { static const GTypeInfo ringbuffer_info = { sizeof (GstJackRingBufferClass), NULL, @@ -144,12 +144,12 @@ gst_jack_ring_buffer_get_type (void) (GInstanceInitFunc) gst_jack_ring_buffer_init, NULL }; - - ringbuffer_type = - g_type_register_static (GST_TYPE_RING_BUFFER, + GType tmp = g_type_register_static (GST_TYPE_RING_BUFFER, "GstJackAudioSinkRingBuffer", &ringbuffer_info, 0); + g_once_init_leave (&ringbuffer_type, tmp); } - return ringbuffer_type; + + return (GType) ringbuffer_type; } static void diff --git a/ext/jack/gstjackaudiosrc.c b/ext/jack/gstjackaudiosrc.c index 0ffdb23..57ec66a 100644 --- a/ext/jack/gstjackaudiosrc.c +++ b/ext/jack/gstjackaudiosrc.c @@ -151,9 +151,9 @@ gst_jack_audio_src_free_channels (GstJackAudioSrc * src) static GType gst_jack_ring_buffer_get_type (void) { - static GType ringbuffer_type = 0; + static volatile gsize ringbuffer_type = 0; - if (!ringbuffer_type) { + if (g_once_init_enter (&ringbuffer_type)) { static const GTypeInfo ringbuffer_info = { sizeof (GstJackRingBufferClass), NULL, NULL, @@ -165,12 +165,12 @@ gst_jack_ring_buffer_get_type (void) (GInstanceInitFunc) gst_jack_ring_buffer_init, NULL }; - - ringbuffer_type = - g_type_register_static (GST_TYPE_RING_BUFFER, + GType tmp = g_type_register_static (GST_TYPE_RING_BUFFER, "GstJackAudioSrcRingBuffer", &ringbuffer_info, 0); + g_once_init_leave (&ringbuffer_type, tmp); } - return ringbuffer_type; + + return (GType) ringbuffer_type; } static void