Make threadsafe get_type() functions.
authorMatthias Clasen <mclasen@redhat.com>
Sat, 1 Dec 2007 17:40:19 +0000 (17:40 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 1 Dec 2007 17:40:19 +0000 (17:40 +0000)
2007-12-01  Matthias Clasen <mclasen@redhat.com>

        * gioenumtypes.c.template: Make threadsafe get_type() functions.

svn path=/trunk/; revision=6011

gio/ChangeLog
gio/Makefile.am
gio/gioenumtypes.c.template

index aaf5d7d..cae3828 100644 (file)
@@ -1,5 +1,9 @@
 2007-12-01  Matthias Clasen <mclasen@redhat.com>
 
+       * gioenumtypes.c.template: Make threadsafe get_type() functions.
+
+2007-12-01  Matthias Clasen <mclasen@redhat.com>
+
        * gdirectorymonitor.c:
        * gfilemonitor.c: Add properties
 
index 2e92df5..6ba1878 100644 (file)
@@ -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
        
index 106922d..cb04327 100644 (file)
 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 ***/