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=/branches/glib-2-16/; revision=7214
This commit is contained in:
Matthias Clasen 2008-07-20 02:52:44 +00:00
parent 4e9d1673e4
commit 9cf831968f
11 changed files with 98 additions and 70 deletions

View File

@ -1,3 +1,21 @@
2008-07-19 Matthias Clasen <mclasen@redhat.com>
Merge from trunk:
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-19 Matthias Clasen <mclasen@redhat.com> 2008-07-19 Matthias Clasen <mclasen@redhat.com>
Merge from trunk: Merge from trunk:

View File

@ -46,11 +46,11 @@ static void g_app_info_class_init (gpointer g_class,
GType GType
g_app_info_get_type (void) 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 */ sizeof (GAppInfoIface), /* class_size */
g_app_info_base_init, /* base_init */ g_app_info_base_init, /* base_init */
@ -62,15 +62,16 @@ g_app_info_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
app_info_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GAppInfo"), g_type_register_static (G_TYPE_INTERFACE, I_("GAppInfo"),
&app_info_info, 0); &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 static void

View File

@ -115,11 +115,11 @@ static void g_async_result_class_init (gpointer g_class,
GType GType
g_async_result_get_type (void) 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 */ sizeof (GAsyncResultIface), /* class_size */
g_async_result_base_init, /* base_init */ g_async_result_base_init, /* base_init */
@ -131,15 +131,16 @@ g_async_result_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
async_result_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GAsyncResult"), g_type_register_static (G_TYPE_INTERFACE, I_("GAsyncResult"),
&async_result_info, 0); &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 static void

View File

@ -2484,11 +2484,11 @@ static void g_desktop_app_info_lookup_class_init (gpointer g_class,
GType GType
g_desktop_app_info_lookup_get_type (void) 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 */ sizeof (GDesktopAppInfoLookupIface), /* class_size */
g_desktop_app_info_lookup_base_init, /* base_init */ g_desktop_app_info_lookup_base_init, /* base_init */
@ -2500,15 +2500,16 @@ g_desktop_app_info_lookup_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
desktop_app_info_lookup_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GDesktopAppInfoLookup"), g_type_register_static (G_TYPE_INTERFACE, I_("GDesktopAppInfoLookup"),
&desktop_app_info_lookup_info, 0); &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 static void

View File

@ -59,11 +59,11 @@ static void g_drive_class_init (gpointer g_class,
GType GType
g_drive_get_type (void) 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 */ sizeof (GDriveIface), /* class_size */
g_drive_base_init, /* base_init */ g_drive_base_init, /* base_init */
@ -75,15 +75,16 @@ g_drive_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
drive_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GDrive"), g_type_register_static (G_TYPE_INTERFACE, I_("GDrive"),
&drive_info, 0); &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 static void

View File

@ -236,11 +236,11 @@ static gboolean g_file_real_copy_finish (GFile
GType GType
g_file_get_type (void) 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 */ sizeof (GFileIface), /* class_size */
g_file_base_init, /* base_init */ g_file_base_init, /* base_init */
@ -252,15 +252,16 @@ g_file_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
file_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GFile"), g_type_register_static (G_TYPE_INTERFACE, I_("GFile"),
&file_info, 0); &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 static void

View File

@ -51,11 +51,11 @@ static void g_icon_class_init (gpointer g_class,
GType GType
g_icon_get_type (void) 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 */ sizeof (GIconIface), /* class_size */
g_icon_base_init, /* base_init */ g_icon_base_init, /* base_init */
@ -67,15 +67,16 @@ g_icon_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
icon_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GIcon"), g_type_register_static (G_TYPE_INTERFACE, I_("GIcon"),
&icon_info, 0); &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 static void

View File

@ -53,11 +53,11 @@ static void g_loadable_icon_class_init (gpointer g_c
GType GType
g_loadable_icon_get_type (void) 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 */ sizeof (GLoadableIconIface), /* class_size */
g_loadable_icon_base_init, /* base_init */ g_loadable_icon_base_init, /* base_init */
@ -69,15 +69,16 @@ g_loadable_icon_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
loadable_icon_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"), g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"),
&loadable_icon_info, 0); &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 static void

View File

@ -68,11 +68,11 @@ static void g_mount_class_init (gpointer g_class,
GType GType
g_mount_get_type (void) 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 */ sizeof (GMountIface), /* class_size */
g_mount_base_init, /* base_init */ g_mount_base_init, /* base_init */
@ -84,15 +84,16 @@ g_mount_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
mount_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GMount"), g_type_register_static (G_TYPE_INTERFACE, I_("GMount"),
&mount_info, 0); &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 static void

View File

@ -44,11 +44,11 @@ static void g_seekable_base_init (gpointer g_class);
GType GType
g_seekable_get_type (void) 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 */ sizeof (GSeekableIface), /* class_size */
g_seekable_base_init, /* base_init */ g_seekable_base_init, /* base_init */
@ -60,15 +60,16 @@ g_seekable_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
seekable_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GSeekable"), g_type_register_static (G_TYPE_INTERFACE, I_("GSeekable"),
&seekable_info, 0); &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 static void

View File

@ -78,11 +78,11 @@ static void g_volume_class_init (gpointer g_class,
GType GType
g_volume_get_type (void) 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 */ sizeof (GVolumeIface), /* class_size */
g_volume_base_init, /* base_init */ g_volume_base_init, /* base_init */
@ -94,15 +94,16 @@ g_volume_get_type (void)
0, /* n_preallocs */ 0, /* n_preallocs */
NULL NULL
}; };
GType g_define_type_id =
volume_type =
g_type_register_static (G_TYPE_INTERFACE, I_("GVolume"), g_type_register_static (G_TYPE_INTERFACE, I_("GVolume"),
&volume_info, 0); &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 static void