mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-27 06:26:15 +01:00
Merge branch 'th/main-context-default-no-mutex' into 'master'
gmain: use atomic operation instead of GMutex to access g_main_context_default() See merge request GNOME/glib!1135
This commit is contained in:
commit
4e12e7ed0d
26
glib/gmain.c
26
glib/gmain.c
@ -439,9 +439,6 @@ static void block_source (GSource *source);
|
||||
|
||||
static GMainContext *glib_worker_context;
|
||||
|
||||
G_LOCK_DEFINE_STATIC (main_loop);
|
||||
static GMainContext *default_main_context;
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
|
||||
|
||||
@ -667,34 +664,35 @@ g_main_context_new (void)
|
||||
|
||||
/**
|
||||
* g_main_context_default:
|
||||
*
|
||||
*
|
||||
* Returns the global default main context. This is the main context
|
||||
* used for main loop functions when a main loop is not explicitly
|
||||
* specified, and corresponds to the "main" main loop. See also
|
||||
* g_main_context_get_thread_default().
|
||||
*
|
||||
*
|
||||
* Returns: (transfer none): the global default main context.
|
||||
**/
|
||||
GMainContext *
|
||||
g_main_context_default (void)
|
||||
{
|
||||
/* Slow, but safe */
|
||||
|
||||
G_LOCK (main_loop);
|
||||
static GMainContext *default_main_context;
|
||||
|
||||
if (!default_main_context)
|
||||
if (g_once_init_enter (&default_main_context))
|
||||
{
|
||||
default_main_context = g_main_context_new ();
|
||||
GMainContext *context;
|
||||
|
||||
TRACE (GLIB_MAIN_CONTEXT_DEFAULT (default_main_context));
|
||||
context = g_main_context_new ();
|
||||
|
||||
TRACE (GLIB_MAIN_CONTEXT_DEFAULT (context));
|
||||
|
||||
#ifdef G_MAIN_POLL_DEBUG
|
||||
if (_g_main_poll_debug)
|
||||
g_print ("default context=%p\n", default_main_context);
|
||||
g_print ("default context=%p\n", context);
|
||||
#endif
|
||||
}
|
||||
|
||||
G_UNLOCK (main_loop);
|
||||
g_once_init_leave ((gsize *) &default_main_context, (gsize) context);
|
||||
|
||||
}
|
||||
|
||||
return default_main_context;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user