GRand: remove setup from g_thread_init_glib
authorRyan Lortie <desrt@desrt.ca>
Fri, 9 Sep 2011 17:31:21 +0000 (13:31 -0400)
committerRyan Lortie <desrt@desrt.ca>
Fri, 9 Sep 2011 17:31:21 +0000 (13:31 -0400)
Use g_once_init_enter instead.

glib/grand.c
glib/gthread.c
glib/gthreadprivate.h

index bb1bffe..1e50edd 100644 (file)
@@ -130,10 +130,10 @@ static GRand* global_random = NULL;
 static guint
 get_random_version (void)
 {
-  static gboolean initialized = FALSE;
+  static gsize initialized = FALSE;
   static guint random_version;
-  
-  if (!initialized)
+
+  if (g_once_init_enter (&initialized))
     {
       const gchar *version_string = g_getenv ("G_RANDOM_VERSION");
       if (!version_string || version_string[0] == '\000' || 
@@ -147,21 +147,12 @@ get_random_version (void)
                     version_string);
          random_version = 22;
        }
-      initialized = TRUE;
+      g_once_init_leave (&initialized, TRUE);
     }
   
   return random_version;
 }
 
-/* This is called from g_thread_init(). It's used to
- * initialize some static data in a threadsafe way.
- */
-void 
-_g_rand_thread_init (void)
-{
-  (void)get_random_version ();
-}
-
 struct _GRand
 {
   guint32 mt[N]; /* the array for the state vector  */
index 6edec63..be9a1cc 100644 (file)
@@ -960,7 +960,6 @@ g_thread_init_glib (void)
 
   /* we may run full-fledged initializers from here */
   _g_convert_thread_init ();
-  _g_rand_thread_init ();
   _g_main_thread_init ();
   _g_utils_thread_init ();
 }
index 8ee465b..70a85bc 100644 (file)
@@ -54,7 +54,6 @@ G_GNUC_INTERNAL void _g_messages_thread_init_nomessage      (void);
 
 /* full fledged initializers */
 G_GNUC_INTERNAL void _g_convert_thread_init (void);
-G_GNUC_INTERNAL void _g_rand_thread_init (void);
 G_GNUC_INTERNAL void _g_main_thread_init (void);
 G_GNUC_INTERNAL void _g_atomic_thread_init (void);
 G_GNUC_INTERNAL void _g_utils_thread_init (void);