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 b2760c6..df12368 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 f2a5332..5352aea 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 ba2976e..4eb2a36 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 9a384b1..f8ad6bf 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 9d91204..7038699 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 e056942..25f99e3 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 567118b..aafa503 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 dd6e478..b5ba6f5 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 1870b88..6f15f7c 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 0e5707b..a2cbb8a 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 5f56bb7..88276aa 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