diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-10-20 12:16:18 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-10-20 17:49:44 +0300 |
commit | 2a970e33a474960bfd1204797caf41996267f20c (patch) | |
tree | 583839de2515f32d49d645d6d88ae80073fa6b2d | |
parent | c718bf881acd36471407b45064873de94822a07a (diff) | |
download | glib-2a970e33a474960bfd1204797caf41996267f20c.tar.gz |
gresolver: Make get_default() thread-safe
https://bugzilla.gnome.org/show_bug.cgi?id=773262
-rw-r--r-- | gio/gresolver.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gio/gresolver.c b/gio/gresolver.c index 23c6ffd76..9b931bb56 100644 --- a/gio/gresolver.c +++ b/gio/gresolver.c @@ -185,6 +185,7 @@ g_resolver_init (GResolver *resolver) #endif } +G_LOCK_DEFINE_STATIC (default_resolver); static GResolver *default_resolver; /** @@ -201,10 +202,15 @@ static GResolver *default_resolver; GResolver * g_resolver_get_default (void) { + GResolver *ret; + + G_LOCK (default_resolver); if (!default_resolver) default_resolver = g_object_new (G_TYPE_THREADED_RESOLVER, NULL); + ret = g_object_ref (default_resolver); + G_UNLOCK (default_resolver); - return g_object_ref (default_resolver); + return ret; } /** @@ -226,9 +232,11 @@ g_resolver_get_default (void) void g_resolver_set_default (GResolver *resolver) { + G_LOCK (default_resolver); if (default_resolver) g_object_unref (default_resolver); default_resolver = g_object_ref (resolver); + G_UNLOCK (default_resolver); } /* Bionic has res_init() but it's not in any header */ |