glib r7208 - trunk/gio



Author: matthiasc
Date: Sun Jul 20 00:34:58 2008
New Revision: 7208
URL: http://svn.gnome.org/viewvc/glib?rev=7208&view=rev

Log:
2008-07-19  Matthias Clasen  <mclasen redhat com>

        543504 â crash in Epiphany Web Browser: Opening local file

        * gappinfo.c:
        * gasyncresult.c:
        * gdesktopappinfo.c:
        * gdrive.c:
        * gfile.c:
        * gicon.c:
        * gloadableicon.c:
        * gmount.c:
        * gseekable.c:
        * gvolume.c: Register types thread-safely.
        Patch by Christian Persch



Modified:
   trunk/gio/ChangeLog
   trunk/gio/gappinfo.c
   trunk/gio/gasyncresult.c
   trunk/gio/gdesktopappinfo.c
   trunk/gio/gdrive.c
   trunk/gio/gfile.c
   trunk/gio/gicon.c
   trunk/gio/gloadableicon.c
   trunk/gio/gmount.c
   trunk/gio/gseekable.c
   trunk/gio/gvolume.c

Modified: trunk/gio/gappinfo.c
==============================================================================
--- trunk/gio/gappinfo.c	(original)
+++ trunk/gio/gappinfo.c	Sun Jul 20 00:34:58 2008
@@ -46,11 +46,11 @@
 GType
 g_app_info_get_type (void)
 {
-  static GType app_info_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! app_info_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo app_info_info =
+     const GTypeInfo app_info_info =
       {
         sizeof (GAppInfoIface), /* class_size */
 	g_app_info_base_init,   /* base_init */
@@ -62,15 +62,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      app_info_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GAppInfo"),
 				&app_info_info, 0);
 
-      g_type_interface_add_prerequisite (app_info_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return app_info_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gasyncresult.c
==============================================================================
--- trunk/gio/gasyncresult.c	(original)
+++ trunk/gio/gasyncresult.c	Sun Jul 20 00:34:58 2008
@@ -115,11 +115,11 @@
 GType
 g_async_result_get_type (void)
 {
-  static GType async_result_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! async_result_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo async_result_info =
+      const GTypeInfo async_result_info =
       {
         sizeof (GAsyncResultIface), /* class_size */
 	g_async_result_base_init,   /* base_init */
@@ -131,15 +131,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      async_result_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GAsyncResult"),
 				&async_result_info, 0);
 
-      g_type_interface_add_prerequisite (async_result_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return async_result_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gdesktopappinfo.c
==============================================================================
--- trunk/gio/gdesktopappinfo.c	(original)
+++ trunk/gio/gdesktopappinfo.c	Sun Jul 20 00:34:58 2008
@@ -2502,11 +2502,11 @@
 GType
 g_desktop_app_info_lookup_get_type (void)
 {
-  static GType desktop_app_info_lookup_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! desktop_app_info_lookup_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo desktop_app_info_lookup_info =
+      const GTypeInfo desktop_app_info_lookup_info =
       {
         sizeof (GDesktopAppInfoLookupIface), /* class_size */
 	g_desktop_app_info_lookup_base_init,   /* base_init */
@@ -2518,15 +2518,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      desktop_app_info_lookup_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GDesktopAppInfoLookup"),
 				&desktop_app_info_lookup_info, 0);
 
-      g_type_interface_add_prerequisite (desktop_app_info_lookup_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return desktop_app_info_lookup_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gdrive.c
==============================================================================
--- trunk/gio/gdrive.c	(original)
+++ trunk/gio/gdrive.c	Sun Jul 20 00:34:58 2008
@@ -61,11 +61,11 @@
 GType
 g_drive_get_type (void)
 {
-  static GType drive_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! drive_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo drive_info =
+      const GTypeInfo drive_info =
       {
         sizeof (GDriveIface), /* class_size */
 	g_drive_base_init,   /* base_init */
@@ -77,15 +77,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      drive_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GDrive"),
 				&drive_info, 0);
 
-      g_type_interface_add_prerequisite (drive_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return drive_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gfile.c
==============================================================================
--- trunk/gio/gfile.c	(original)
+++ trunk/gio/gfile.c	Sun Jul 20 00:34:58 2008
@@ -241,11 +241,11 @@
 GType
 g_file_get_type (void)
 {
-  static GType file_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! file_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo file_info =
+      const GTypeInfo file_info =
       {
         sizeof (GFileIface), /* class_size */
 	g_file_base_init,   /* base_init */
@@ -257,15 +257,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      file_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GFile"),
 				&file_info, 0);
 
-      g_type_interface_add_prerequisite (file_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return file_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gicon.c
==============================================================================
--- trunk/gio/gicon.c	(original)
+++ trunk/gio/gicon.c	Sun Jul 20 00:34:58 2008
@@ -51,11 +51,11 @@
 GType
 g_icon_get_type (void)
 {
-  static GType icon_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! icon_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo icon_info =
+      const GTypeInfo icon_info =
       {
         sizeof (GIconIface), /* class_size */
 	g_icon_base_init,   /* base_init */
@@ -67,15 +67,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      icon_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GIcon"),
 				&icon_info, 0);
 
-      g_type_interface_add_prerequisite (icon_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return icon_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gloadableicon.c
==============================================================================
--- trunk/gio/gloadableicon.c	(original)
+++ trunk/gio/gloadableicon.c	Sun Jul 20 00:34:58 2008
@@ -55,11 +55,11 @@
 GType
 g_loadable_icon_get_type (void)
 {
-  static GType loadable_icon_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! loadable_icon_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo loadable_icon_info =
+      const GTypeInfo loadable_icon_info =
 	{
         sizeof (GLoadableIconIface), /* class_size */
 	g_loadable_icon_base_init,   /* base_init */
@@ -71,15 +71,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      loadable_icon_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"),
 				&loadable_icon_info, 0);
 
-      g_type_interface_add_prerequisite (loadable_icon_type, G_TYPE_ICON);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_ICON);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return loadable_icon_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gmount.c
==============================================================================
--- trunk/gio/gmount.c	(original)
+++ trunk/gio/gmount.c	Sun Jul 20 00:34:58 2008
@@ -70,11 +70,11 @@
 GType
 g_mount_get_type (void)
 {
-  static GType mount_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! mount_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo mount_info =
+      const GTypeInfo mount_info =
       {
         sizeof (GMountIface), /* class_size */
 	g_mount_base_init,   /* base_init */
@@ -86,15 +86,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      mount_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GMount"),
 				&mount_info, 0);
 
-      g_type_interface_add_prerequisite (mount_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return mount_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gseekable.c
==============================================================================
--- trunk/gio/gseekable.c	(original)
+++ trunk/gio/gseekable.c	Sun Jul 20 00:34:58 2008
@@ -44,11 +44,11 @@
 GType
 g_seekable_get_type (void)
 {
-  static GType seekable_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (!seekable_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo seekable_info =
+      const GTypeInfo seekable_info =
       {
         sizeof (GSeekableIface), /* class_size */
 	g_seekable_base_init,   /* base_init */
@@ -60,15 +60,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      seekable_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GSeekable"),
 				&seekable_info, 0);
 
-      g_type_interface_add_prerequisite (seekable_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return seekable_type;
+  return g_define_type_id__volatile;
 }
 
 static void

Modified: trunk/gio/gvolume.c
==============================================================================
--- trunk/gio/gvolume.c	(original)
+++ trunk/gio/gvolume.c	Sun Jul 20 00:34:58 2008
@@ -80,11 +80,11 @@
 GType
 g_volume_get_type (void)
 {
-  static GType volume_type = 0;
+  static volatile gsize g_define_type_id__volatile = 0;
 
-  if (! volume_type)
+  if (g_once_init_enter (&g_define_type_id__volatile))
     {
-      static const GTypeInfo volume_info =
+      const GTypeInfo volume_info =
       {
         sizeof (GVolumeIface), /* class_size */
 	g_volume_base_init,   /* base_init */
@@ -96,15 +96,16 @@
 	0,              /* n_preallocs */
 	NULL
       };
-
-      volume_type =
+      GType g_define_type_id =
 	g_type_register_static (G_TYPE_INTERFACE, I_("GVolume"),
 				&volume_info, 0);
 
-      g_type_interface_add_prerequisite (volume_type, G_TYPE_OBJECT);
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
     }
 
-  return volume_type;
+  return g_define_type_id__volatile;
 }
 
 static void



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