summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-10-20 12:16:18 +0300
committerSebastian Dröge <sebastian@centricular.com>2016-10-20 17:49:44 +0300
commit2a970e33a474960bfd1204797caf41996267f20c (patch)
tree583839de2515f32d49d645d6d88ae80073fa6b2d
parentc718bf881acd36471407b45064873de94822a07a (diff)
downloadglib-2a970e33a474960bfd1204797caf41996267f20c.tar.gz
gresolver: Make get_default() thread-safe
https://bugzilla.gnome.org/show_bug.cgi?id=773262
-rw-r--r--gio/gresolver.c10
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 */