mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-15 20:18:05 +02:00
use g_once_init_enter/g_once_init_leave to guard critical initialization
Tue Jul 10 12:31:50 2007 Tim Janik <timj@imendio.com> * gtype.h: use g_once_init_enter/g_once_init_leave to guard critical initialization section of *_get_type implementations in G_DEFINE_TYPE, bug #65041. svn path=/trunk/; revision=5618
This commit is contained in:
parent
1132766280
commit
3bdefad44a
@ -1,3 +1,9 @@
|
|||||||
|
Tue Jul 10 12:31:50 2007 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
|
* gtype.h: use g_once_init_enter/g_once_init_leave to guard critical
|
||||||
|
initialization section of *_get_type implementations in G_DEFINE_TYPE,
|
||||||
|
bug #65041.
|
||||||
|
|
||||||
Fri Jun 29 2007 Matthias Clasen <mclasen@redhat.com>
|
Fri Jun 29 2007 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* === Released 2.13.6 ===
|
* === Released 2.13.6 ===
|
||||||
|
@ -368,23 +368,24 @@ static void type_name##_class_intern_init (gpointer klass) \
|
|||||||
GType \
|
GType \
|
||||||
type_name##_get_type (void) \
|
type_name##_get_type (void) \
|
||||||
{ \
|
{ \
|
||||||
static GType g_define_type_id = 0; \
|
static volatile gsize g_define_type_id__volatile = 0; \
|
||||||
if (G_UNLIKELY (g_define_type_id == 0)) \
|
if (g_once_init_enter (&g_define_type_id__volatile)) \
|
||||||
{ \
|
{ \
|
||||||
g_define_type_id = \
|
GType g_define_type_id = \
|
||||||
g_type_register_static_simple (TYPE_PARENT, \
|
g_type_register_static_simple (TYPE_PARENT, \
|
||||||
g_intern_static_string (#TypeName), \
|
g_intern_static_string (#TypeName), \
|
||||||
sizeof (TypeName##Class), \
|
sizeof (TypeName##Class), \
|
||||||
(GClassInitFunc)type_name##_class_intern_init, \
|
(GClassInitFunc) type_name##_class_intern_init, \
|
||||||
sizeof (TypeName), \
|
sizeof (TypeName), \
|
||||||
(GInstanceInitFunc)type_name##_init, \
|
(GInstanceInitFunc) type_name##_init, \
|
||||||
(GTypeFlags) flags); \
|
(GTypeFlags) flags); \
|
||||||
{ /* custom code follows */
|
{ /* custom code follows */
|
||||||
#define _G_DEFINE_TYPE_EXTENDED_END() \
|
#define _G_DEFINE_TYPE_EXTENDED_END() \
|
||||||
/* following custom code */ \
|
/* following custom code */ \
|
||||||
} \
|
} \
|
||||||
|
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
|
||||||
} \
|
} \
|
||||||
return g_define_type_id; \
|
return g_define_type_id__volatile; \
|
||||||
} /* closes type_name##_get_type() */
|
} /* closes type_name##_get_type() */
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user