Use a separate lock for extension point registration to avoid deadlock.
authorMatthias Clasen <matthiasc@src.gnome.org>
Mon, 2 Mar 2009 03:50:09 +0000 (03:50 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 2 Mar 2009 03:50:09 +0000 (03:50 +0000)
        * giomodule.c: Use a separate lock for extension point registration
        to avoid deadlock. Discovered by Torsten Schoenfeld

svn path=/trunk/; revision=7935

gio/ChangeLog
gio/giomodule.c

index 5cd74ea7d3831e0f94ed690424bcdbd8c9654ec3..a0d3bcde1cfc80dbd0549ada0e3290c4418fb153 100644 (file)
@@ -1,3 +1,10 @@
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+       Bug 573658 – Deadlock in giomodule.c
+
+       * giomodule.c: Use a separate lock for extension point registration
+       to avoid deadlock. Discovered by Torsten Schoenfeld
+
 2009-03-01  Matthias Clasen  <mclasen@redhat.com>
 
        * gdatainputstream.c: Fix docs
index 59f417bacb416414544ee6090113c95273bb5789..68f3b7b68da7f7b099bd63de47b563cc39161782 100644 (file)
@@ -283,6 +283,7 @@ g_io_modules_load_all_in_directory (const char *dirname)
   return modules;
 }
 
+G_LOCK_DEFINE_STATIC (registered_extensions);
 G_LOCK_DEFINE_STATIC (loaded_dirs);
 
 extern GType _g_fen_directory_monitor_get_type (void);
@@ -302,7 +303,7 @@ _g_io_modules_ensure_extension_points_registered (void)
   static gboolean registered_extensions = FALSE;
   GIOExtensionPoint *ep;
 
-  G_LOCK (loaded_dirs);
+  G_LOCK (registered_extensions);
   
   if (!registered_extensions)
     {
@@ -329,7 +330,7 @@ _g_io_modules_ensure_extension_points_registered (void)
       g_io_extension_point_set_required_type (ep, G_TYPE_VFS);
     }
   
-  G_UNLOCK (loaded_dirs);
+  G_UNLOCK (registered_extensions);
  }
 
 void