G_DEFINE_QUARK: fix up some implementation issues
authorRyan Lortie <desrt@desrt.ca>
Wed, 5 Sep 2012 00:54:33 +0000 (20:54 -0400)
committerRyan Lortie <desrt@desrt.ca>
Sat, 8 Sep 2012 18:08:01 +0000 (14:08 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=683360

glib/gquark.h

index 7689447..39d22ab 100644 (file)
@@ -48,13 +48,12 @@ const gchar *         g_quark_to_string          (GQuark       quark) G_GNUC_CON
 GQuark                                                                  \
 q_n##_quark (void)                                                      \
 {                                                                       \
-  static volatile gsize g_define_quark__volatile = 0;                   \
-  if (g_once_init_enter (&g_define_quark__volatile))                    \
-    {                                                                   \
-      GQuark g_define_quark = g_quark_from_string (#QN);                \
-      g_once_init_leave (&g_define_quark__volatile, g_define_quark);    \
-    }                                                                   \
-  return g_define_quark__volatile;                                      \
+  static GQuark q;                                                      \
+                                                                        \
+  if G_UNLIKELY (q == 0)                                                \
+    q = g_quark_from_static_string (#QN);                               \
+                                                                        \
+  return q;                                                             \
 }
 
 const gchar *         g_intern_string            (const gchar *string);