From 264aa4cd8af1807d3125e42fcc5351aaadd95290 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 1 Dec 2007 17:40:19 +0000 Subject: [PATCH] Make threadsafe get_type() functions. 2007-12-01 Matthias Clasen * gioenumtypes.c.template: Make threadsafe get_type() functions. svn path=/trunk/; revision=6011 --- gio/ChangeLog | 4 ++++ gio/Makefile.am | 4 ++-- gio/gioenumtypes.c.template | 20 ++++++++++++-------- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index aaf5d7d1..cae38288 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,7 @@ +2007-12-01 Matthias Clasen + + * gioenumtypes.c.template: Make threadsafe get_type() functions. + 2007-12-01 Matthias Clasen * gdirectorymonitor.c: diff --git a/gio/Makefile.am b/gio/Makefile.am index 2e92df5e..6ba1878c 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -258,9 +258,9 @@ CLEANFILES = \ $(marshal_sources) \ $(NULL) -gioenumtypes.h: $(gio_headers) +gioenumtypes.h: $(gio_headers) gioenumtypes.h.template ( cd $(srcdir) && $(top_builddir)/gobject/glib-mkenums --template gioenumtypes.h.template $(gio_headers) ) > gioenumtypes.h -gioenumtypes.c: $(gio_headers) +gioenumtypes.c: $(gio_headers) gioenumtypes.c.template ( cd $(srcdir) && $(top_builddir)/gobject/glib-mkenums --template gioenumtypes.c.template $(gio_headers) ) > gioenumtypes.c diff --git a/gio/gioenumtypes.c.template b/gio/gioenumtypes.c.template index 106922df..cb043277 100644 --- a/gio/gioenumtypes.c.template +++ b/gio/gioenumtypes.c.template @@ -12,22 +12,26 @@ GType @enum_name@_get_type (void) { - static GType etype = 0; + static volatile gsize g_define_type_id__volatile = 0; - if (G_UNLIKELY(etype == 0)) { - static const G@Type@Value values[] = { + if (g_once_init_enter (&g_define_type_id__volatile)) + { + static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ - { 0, NULL, NULL } - }; - etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + { 0, NULL, NULL } + }; + GType g_define_type_id = + = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); } - return etype; + + return g_define_type_id__volatile; } /*** END value-tail ***/ -- 2.34.1