mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-01 15:03:39 +02:00
gobject: use g_once_init_enter_pointer for GType initializers
GType is either an integer or a pointer, so we have to use the _pointer version here to support architectures such as Morello. Helps: https://gitlab.gnome.org/GNOME/glib/-/issues/2842 See also: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3578
This commit is contained in:
committed by
Philip Withnall
parent
a1dfecf11f
commit
5ecd3cbe52
@@ -2009,8 +2009,8 @@ guint g_type_get_type_registration_serial (void);
|
||||
* GType
|
||||
* gtk_gadget_get_type (void)
|
||||
* {
|
||||
* static gsize static_g_define_type_id = 0;
|
||||
* if (g_once_init_enter (&static_g_define_type_id))
|
||||
* static GType static_g_define_type_id = 0;
|
||||
* if (g_once_init_enter_pointer (&static_g_define_type_id))
|
||||
* {
|
||||
* GType g_define_type_id =
|
||||
* g_type_register_static_simple (GTK_TYPE_WIDGET,
|
||||
@@ -2030,7 +2030,7 @@ guint g_type_get_type_registration_serial (void);
|
||||
* };
|
||||
* g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
|
||||
* }
|
||||
* g_once_init_leave (&static_g_define_type_id, g_define_type_id);
|
||||
* g_once_init_leave_pointer (&static_g_define_type_id, g_define_type_id);
|
||||
* }
|
||||
* return static_g_define_type_id;
|
||||
* }
|
||||
@@ -2265,6 +2265,16 @@ static void type_name##_class_intern_init (gpointer klass) \
|
||||
}
|
||||
#endif /* GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 */
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_80
|
||||
#define _g_type_once_init_type GType
|
||||
#define _g_type_once_init_enter g_once_init_enter_pointer
|
||||
#define _g_type_once_init_leave g_once_init_leave_pointer
|
||||
#else /* if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_80 */
|
||||
#define _g_type_once_init_type gsize
|
||||
#define _g_type_once_init_enter g_once_init_enter
|
||||
#define _g_type_once_init_leave g_once_init_leave
|
||||
#endif /* GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_80 */
|
||||
|
||||
/* Added for _G_DEFINE_TYPE_EXTENDED_WITH_PRELUDE */
|
||||
#define _G_DEFINE_TYPE_EXTENDED_BEGIN_PRE(TypeName, type_name, TYPE_PARENT) \
|
||||
\
|
||||
@@ -2286,15 +2296,15 @@ type_name##_get_instance_private (TypeName *self) \
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static gsize static_g_define_type_id = 0;
|
||||
static _g_type_once_init_type static_g_define_type_id = 0;
|
||||
/* Prelude goes here */
|
||||
|
||||
/* Added for _G_DEFINE_TYPE_EXTENDED_WITH_PRELUDE */
|
||||
#define _G_DEFINE_TYPE_EXTENDED_BEGIN_REGISTER(TypeName, type_name, TYPE_PARENT, flags) \
|
||||
if (g_once_init_enter (&static_g_define_type_id)) \
|
||||
if (_g_type_once_init_enter (&static_g_define_type_id)) \
|
||||
{ \
|
||||
GType g_define_type_id = type_name##_get_type_once (); \
|
||||
g_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
_g_type_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
} \
|
||||
return static_g_define_type_id; \
|
||||
} /* closes type_name##_get_type() */ \
|
||||
@@ -2334,8 +2344,8 @@ static void type_name##_default_init (TypeName##Interface *klass); \
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static gsize static_g_define_type_id = 0; \
|
||||
if (g_once_init_enter (&static_g_define_type_id)) \
|
||||
static _g_type_once_init_type static_g_define_type_id = 0; \
|
||||
if (_g_type_once_init_enter (&static_g_define_type_id)) \
|
||||
{ \
|
||||
GType g_define_type_id = \
|
||||
g_type_register_static_simple (G_TYPE_INTERFACE, \
|
||||
@@ -2351,7 +2361,7 @@ type_name##_get_type (void) \
|
||||
#define _G_DEFINE_INTERFACE_EXTENDED_END() \
|
||||
/* following custom code */ \
|
||||
} \
|
||||
g_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
_g_type_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
} \
|
||||
return static_g_define_type_id; \
|
||||
} /* closes type_name##_get_type() */
|
||||
@@ -2460,11 +2470,11 @@ static GType type_name##_get_type_once (void); \
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static gsize static_g_define_type_id = 0; \
|
||||
if (g_once_init_enter (&static_g_define_type_id)) \
|
||||
static _g_type_once_init_type static_g_define_type_id = 0; \
|
||||
if (_g_type_once_init_enter (&static_g_define_type_id)) \
|
||||
{ \
|
||||
GType g_define_type_id = type_name##_get_type_once (); \
|
||||
g_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
_g_type_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
} \
|
||||
return static_g_define_type_id; \
|
||||
} \
|
||||
@@ -2497,11 +2507,11 @@ static GType type_name##_get_type_once (void); \
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static gsize static_g_define_type_id = 0; \
|
||||
if (g_once_init_enter (&static_g_define_type_id)) \
|
||||
static _g_type_once_init_type static_g_define_type_id = 0; \
|
||||
if (_g_type_once_init_enter (&static_g_define_type_id)) \
|
||||
{ \
|
||||
GType g_define_type_id = type_name##_get_type_once (); \
|
||||
g_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
_g_type_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
} \
|
||||
return static_g_define_type_id; \
|
||||
} \
|
||||
@@ -2550,11 +2560,11 @@ static GType type_name##_get_type_once (void); \
|
||||
GType \
|
||||
type_name##_get_type (void) \
|
||||
{ \
|
||||
static gsize static_g_define_type_id = 0; \
|
||||
if (g_once_init_enter (&static_g_define_type_id)) \
|
||||
static _g_type_once_init_type static_g_define_type_id = 0; \
|
||||
if (_g_type_once_init_enter (&static_g_define_type_id)) \
|
||||
{ \
|
||||
GType g_define_type_id = type_name##_get_type_once (); \
|
||||
g_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
_g_type_once_init_leave (&static_g_define_type_id, g_define_type_id); \
|
||||
} \
|
||||
return static_g_define_type_id; \
|
||||
} \
|
||||
|
Reference in New Issue
Block a user