[gvfs] Move GConf initialization from backend constructor



commit 5c060227daefafb6c0751422fa585483fc861515
Author: Tomas Bzatek <tbzatek redhat com>
Date:   Wed Sep 8 18:13:20 2010 +0200

    Move GConf initialization from backend constructor
    
    Solve the deadlock described in bug 628889

 daemon/gvfsbackendsmb.c       |   43 ++++++++++++++++++-------------------
 daemon/gvfsbackendsmbbrowse.c |   47 +++++++++++++++++++++--------------------
 2 files changed, 45 insertions(+), 45 deletions(-)
---
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c
index 88dac26..a4010c5 100644
--- a/daemon/gvfsbackendsmb.c
+++ b/daemon/gvfsbackendsmb.c
@@ -121,6 +121,27 @@ g_vfs_backend_smb_finalize (GObject *object)
 static void
 g_vfs_backend_smb_init (GVfsBackendSmb *backend)
 {
+#ifdef HAVE_GCONF
+  GConfClient *gclient;
+#endif
+
+#ifdef HAVE_GCONF
+  gclient = gconf_client_get_default ();
+  if (gclient)
+    {
+      char *workgroup;
+
+      workgroup = gconf_client_get_string (gclient,
+					   PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
+
+      if (workgroup && workgroup[0])
+	default_workgroup = workgroup;
+      else
+	g_free (workgroup);
+
+      g_object_unref (gclient);
+    }
+#endif
 }
 
 /**
@@ -2109,9 +2130,6 @@ g_vfs_backend_smb_class_init (GVfsBackendSmbClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-#ifdef HAVE_GCONF
-  GConfClient *gclient;
-#endif
   
   gobject_class->finalize = g_vfs_backend_smb_finalize;
 
@@ -2138,25 +2156,6 @@ g_vfs_backend_smb_class_init (GVfsBackendSmbClass *klass)
   backend_class->move = do_move;
   backend_class->try_query_settable_attributes = try_query_settable_attributes;
   backend_class->set_attribute = do_set_attribute;
-
-#ifdef HAVE_GCONF
-  gclient = gconf_client_get_default ();
-  if (gclient)
-    {
-      char *workgroup;
-      
-      workgroup = gconf_client_get_string (gclient, 
-					   PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
-
-      if (workgroup && workgroup[0])
-	default_workgroup = workgroup;
-      else
-	g_free (workgroup);
-      
-      g_object_unref (gclient);
-    }
-#endif
-
 }
 
 void
diff --git a/daemon/gvfsbackendsmbbrowse.c b/daemon/gvfsbackendsmbbrowse.c
index 97d3c99..dd3dc2a 100644
--- a/daemon/gvfsbackendsmbbrowse.c
+++ b/daemon/gvfsbackendsmbbrowse.c
@@ -247,11 +247,35 @@ g_vfs_backend_smb_browse_finalize (GObject *object)
 static void
 g_vfs_backend_smb_browse_init (GVfsBackendSmbBrowse *backend)
 {
+#ifdef HAVE_GCONF
+  GConfClient *gclient;
+#endif
+
   backend->entries_lock = g_mutex_new ();
   backend->update_cache_lock = g_mutex_new ();
 
   if (mount_tracker == NULL)
     mount_tracker = g_mount_tracker_new (NULL);
+
+#ifdef HAVE_GCONF
+  gclient = gconf_client_get_default ();
+  if (gclient)
+    {
+      char *workgroup;
+
+      workgroup = gconf_client_get_string (gclient,
+					   PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
+
+      if (workgroup && workgroup[0])
+	default_workgroup = workgroup;
+      else
+	g_free (workgroup);
+
+      g_object_unref (gclient);
+    }
+#endif
+
+  DEBUG ("g_vfs_backend_smb_browse_init: default workgroup = '%s'\n", default_workgroup ? default_workgroup : "NULL");
 }
 
 /**
@@ -1456,9 +1480,6 @@ g_vfs_backend_smb_browse_class_init (GVfsBackendSmbBrowseClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-#ifdef HAVE_GCONF
-  GConfClient *gclient;
-#endif
   
   gobject_class->finalize = g_vfs_backend_smb_browse_finalize;
 
@@ -1475,26 +1496,6 @@ g_vfs_backend_smb_browse_class_init (GVfsBackendSmbBrowseClass *klass)
   backend_class->try_query_info = try_query_info;
   backend_class->enumerate = do_enumerate;
   backend_class->try_enumerate = try_enumerate;
-
-#ifdef HAVE_GCONF
-  gclient = gconf_client_get_default ();
-  if (gclient)
-    {
-      char *workgroup;
-      
-      workgroup = gconf_client_get_string (gclient, 
-					   PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
-
-      if (workgroup && workgroup[0])
-	default_workgroup = workgroup;
-      else
-	g_free (workgroup);
-      
-      g_object_unref (gclient);
-    }
-#endif
-
-  DEBUG ("g_vfs_backend_smb_browse_class_init - default workgroup = '%s'\n", default_workgroup ? default_workgroup : "NULL");
 }
 
 void



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