543504 – crash in Epiphany Web Browser: Opening local file
authorMatthias Clasen <mclasen@redhat.com>
Sun, 20 Jul 2008 00:34:58 +0000 (00:34 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 20 Jul 2008 00:34:58 +0000 (00:34 +0000)
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

svn path=/trunk/; revision=7208

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

index b2760c68c3ba2082c2d2c17180a5b88ec71eb29a..df1236880f90330ebf5709f138b52b704af7168f 100644 (file)
@@ -1,3 +1,19 @@
+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
+
 2008-07-18  Matthias Clasen  <mclasen@redhat.com>
 
        * gcontenttype.c: Remove debug spew
index f2a53324fff6aa774d28f5b30ffebd63fb524f02..5352aeabd079bfcc9d4df6d70ce1c9a692a98889 100644 (file)
@@ -46,11 +46,11 @@ static void g_app_info_class_init (gpointer g_class,
 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 @@ g_app_info_get_type (void)
        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
index ba2976e20ccf5672a8601cde6d0433a5a5a293b2..4eb2a36d860e6ec74d247437e9dbb6cd18121d45 100644 (file)
@@ -115,11 +115,11 @@ static void g_async_result_class_init (gpointer g_class,
 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 @@ g_async_result_get_type (void)
        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
index 9a384b1984f3626243dc3a532e2454ef13499769..f8ad6bfd066d6391c964e361c96d17f73d46d499 100644 (file)
@@ -2502,11 +2502,11 @@ static void g_desktop_app_info_lookup_class_init (gpointer g_class,
 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 @@ g_desktop_app_info_lookup_get_type (void)
        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
index 9d912042e6784e02b95771474acb6603a8a91bbf..70386997a11fc23d681dbd8d4c2bdc7f36441db4 100644 (file)
@@ -61,11 +61,11 @@ static void g_drive_class_init (gpointer g_class,
 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 @@ g_drive_get_type (void)
        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
index e056942a16adeafd7ba39fa71ed911c5d80ee4f2..25f99e3cd0c3de4d755c302976a8409ff437c77d 100644 (file)
@@ -241,11 +241,11 @@ static gboolean           g_file_real_copy_finish                 (GFile
 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 @@ g_file_get_type (void)
        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
index 567118b7a14d31b8c151c0027b9073c07c2c7e29..aafa5034a95ff6e0352769f0c478c80ab162b50a 100644 (file)
@@ -51,11 +51,11 @@ static void g_icon_class_init (gpointer g_class,
 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 @@ g_icon_get_type (void)
        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
index dd6e47812567638492a0684f84dea9c88501eefa..b5ba6f568ad4715a51c28b5ad0a19a30f6f62209 100644 (file)
@@ -55,11 +55,11 @@ static void          g_loadable_icon_class_init       (gpointer              g_c
 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 @@ g_loadable_icon_get_type (void)
        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
index 1870b8824c13ba313960a45cbc805136fac46992..6f15f7cc6ec97087a3f105618ce3f339b77efdf9 100644 (file)
@@ -70,11 +70,11 @@ static void g_mount_class_init (gpointer g_class,
 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 @@ g_mount_get_type (void)
        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
index 0e5707b3e3a8c5f0bea006220e85b5efcf27281c..a2cbb8a5c6ebaeaa057b3618a6dba2ce47e4358d 100644 (file)
@@ -44,11 +44,11 @@ static void g_seekable_base_init (gpointer g_class);
 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 @@ g_seekable_get_type (void)
        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
index 5f56bb7fa00e3b02e03f164dcb25394bc6f62189..88276aa9a92079808a9b76c089998b9333d2015b 100644 (file)
@@ -80,11 +80,11 @@ static void g_volume_class_init (gpointer g_class,
 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 @@ g_volume_get_type (void)
        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