Commit 2a9b3c6a authored by Federico Mena Quintero's avatar Federico Mena Quintero
Browse files

Use g_once for all the mkenums template files

Without this, initialization of enum/flags values from multithreaded
programs may not work correctly.

Fixes #1617.
parent 9f739ab1
...@@ -12,21 +12,26 @@ ...@@ -12,21 +12,26 @@
GType GType
@enum_name@_get_type (void) @enum_name@_get_type (void)
{ {
static GType etype = 0; static volatile gsize g_define_type_id__volatile = 0;
if (G_UNLIKELY(etype == 0)) {
static const G@Type@Value values[] = { if (g_once_init_enter (&g_define_type_id__volatile))
{
static const G@Type@Value values[] = {
/*** END value-header ***/ /*** END value-header ***/
/*** BEGIN value-production ***/ /*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" }, { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/ /*** END value-production ***/
/*** BEGIN value-tail ***/ /*** BEGIN value-tail ***/
{ 0, NULL, NULL } { 0, NULL, NULL }
}; };
etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); GType g_define_type_id =
g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
} }
return etype;
return g_define_type_id__volatile;
} }
/*** END value-tail ***/ /*** END value-tail ***/
......
...@@ -14,21 +14,26 @@ ...@@ -14,21 +14,26 @@
GType GType
_@enum_name@_get_type (void) _@enum_name@_get_type (void)
{ {
static GType etype = 0; static volatile gsize g_define_type_id__volatile = 0;
if (G_UNLIKELY(etype == 0)) {
static const G@Type@Value values[] = { if (g_once_init_enter (&g_define_type_id__volatile))
{
static const G@Type@Value values[] = {
/*** END value-header ***/ /*** END value-header ***/
/*** BEGIN value-production ***/ /*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" }, { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/ /*** END value-production ***/
/*** BEGIN value-tail ***/ /*** BEGIN value-tail ***/
{ 0, NULL, NULL } { 0, NULL, NULL }
}; };
etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); GType g_define_type_id =
g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
} }
return etype;
return g_define_type_id__volatile;
} }
/*** END value-tail ***/ /*** END value-tail ***/
......
...@@ -13,21 +13,26 @@ ...@@ -13,21 +13,26 @@
GType GType
@enum_name@_get_type (void) @enum_name@_get_type (void)
{ {
static GType etype = 0; static volatile gsize g_define_type_id__volatile = 0;
if (G_UNLIKELY(etype == 0)) {
static const G@Type@Value values[] = { if (g_once_init_enter (&g_define_type_id__volatile))
{
static const G@Type@Value values[] = {
/*** END value-header ***/ /*** END value-header ***/
/*** BEGIN value-production ***/ /*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" }, { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/ /*** END value-production ***/
/*** BEGIN value-tail ***/ /*** BEGIN value-tail ***/
{ 0, NULL, NULL } { 0, NULL, NULL }
}; };
etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); GType g_define_type_id =
g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
} }
return etype;
return g_define_type_id__volatile;
} }
/*** END value-tail ***/ /*** END value-tail ***/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment