GRand: remove setup from g_thread_init_glib

Use g_once_init_enter instead.
This commit is contained in:
Ryan Lortie
2011-09-09 13:31:21 -04:00
parent 413186a962
commit 71c72d5e13
3 changed files with 4 additions and 15 deletions

View File

@@ -130,10 +130,10 @@ static GRand* global_random = NULL;
static guint static guint
get_random_version (void) get_random_version (void)
{ {
static gboolean initialized = FALSE; static gsize initialized = FALSE;
static guint random_version; static guint random_version;
if (!initialized) if (g_once_init_enter (&initialized))
{ {
const gchar *version_string = g_getenv ("G_RANDOM_VERSION"); const gchar *version_string = g_getenv ("G_RANDOM_VERSION");
if (!version_string || version_string[0] == '\000' || if (!version_string || version_string[0] == '\000' ||
@@ -147,21 +147,12 @@ get_random_version (void)
version_string); version_string);
random_version = 22; random_version = 22;
} }
initialized = TRUE; g_once_init_leave (&initialized, TRUE);
} }
return random_version; 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 struct _GRand
{ {
guint32 mt[N]; /* the array for the state vector */ guint32 mt[N]; /* the array for the state vector */

View File

@@ -960,7 +960,6 @@ g_thread_init_glib (void)
/* we may run full-fledged initializers from here */ /* we may run full-fledged initializers from here */
_g_convert_thread_init (); _g_convert_thread_init ();
_g_rand_thread_init ();
_g_main_thread_init (); _g_main_thread_init ();
_g_utils_thread_init (); _g_utils_thread_init ();
} }

View File

@@ -54,7 +54,6 @@ G_GNUC_INTERNAL void _g_messages_thread_init_nomessage (void);
/* full fledged initializers */ /* full fledged initializers */
G_GNUC_INTERNAL void _g_convert_thread_init (void); 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_main_thread_init (void);
G_GNUC_INTERNAL void _g_atomic_thread_init (void); G_GNUC_INTERNAL void _g_atomic_thread_init (void);
G_GNUC_INTERNAL void _g_utils_thread_init (void); G_GNUC_INTERNAL void _g_utils_thread_init (void);