[glib] gresolver: Make get_default() thread-safe



commit 2a970e33a474960bfd1204797caf41996267f20c
Author: Sebastian Dröge <sebastian centricular com>
Date:   Thu Oct 20 12:16:18 2016 +0300

    gresolver: Make get_default() thread-safe
    
    https://bugzilla.gnome.org/show_bug.cgi?id=773262

 gio/gresolver.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)
---
diff --git a/gio/gresolver.c b/gio/gresolver.c
index 23c6ffd..9b931bb 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 */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]