[glib/wip/gcleanup] gtype: Push all the basics GType's onto the cleanup list
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/gcleanup] gtype: Push all the basics GType's onto the cleanup list
- Date: Thu, 7 Nov 2013 22:03:36 +0000 (UTC)
commit c9a8434ece65a1b013dd9c9b2158cc78817e0dc5
Author: Stef Walter <stefw gnome org>
Date: Thu Nov 7 22:52:18 2013 +0100
gtype: Push all the basics GType's onto the cleanup list
gobject/gbinding.c | 1 +
gobject/gboxed.c | 3 ++-
gobject/genums.c | 2 ++
gobject/gobject.c | 1 +
gobject/gparam.c | 1 +
gobject/gparamspecs.c | 12 ++++++++----
gobject/gsourceclosure.c | 1 +
gobject/gtype.c | 2 ++
gobject/gtype.h | 6 ++++++
gobject/gtypemodule.c | 2 +-
gobject/gtypemodule.h | 3 +++
gobject/gtypeplugin.c | 1 +
gobject/gvaluetypes.c | 14 ++++++++++++++
gobject/tests/dynamictests.c | 1 +
gobject/tests/enums.c | 2 ++
gobject/tests/signals.c | 4 ++++
gobject/tests/testcommon.h | 2 ++
gobject/tests/type.c | 4 +++-
18 files changed, 55 insertions(+), 7 deletions(-)
---
diff --git a/gobject/gbinding.c b/gobject/gbinding.c
index c8c8fa3..00e766e 100644
--- a/gobject/gbinding.c
+++ b/gobject/gbinding.c
@@ -135,6 +135,7 @@ g_binding_flags_get_type (void)
};
GType g_define_type_id =
g_flags_register_static (g_intern_static_string ("GBindingFlags"), values);
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
diff --git a/gobject/gboxed.c b/gobject/gboxed.c
index 67d6351..3e00afb 100644
--- a/gobject/gboxed.c
+++ b/gobject/gboxed.c
@@ -108,6 +108,7 @@ _g_boxed_type_init (void)
*/
type = g_type_register_fundamental (G_TYPE_BOXED, g_intern_static_string ("GBoxed"), &info, &finfo,
G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_BOXED);
}
@@ -177,7 +178,7 @@ g_strv_get_type (void)
g_boxed_type_register_static (g_intern_static_string ("GStrv"),
(GBoxedCopyFunc) g_strdupv,
(GBoxedFreeFunc) g_strfreev);
-
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
diff --git a/gobject/genums.c b/gobject/genums.c
index 474e791..1a8de8f 100644
--- a/gobject/genums.c
+++ b/gobject/genums.c
@@ -113,6 +113,7 @@ _g_enum_types_init (void)
info.class_size = sizeof (GEnumClass);
type = g_type_register_fundamental (G_TYPE_ENUM, g_intern_static_string ("GEnum"), &info, &finfo,
G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_ENUM);
/* G_TYPE_FLAGS
@@ -120,6 +121,7 @@ _g_enum_types_init (void)
info.class_size = sizeof (GFlagsClass);
type = g_type_register_fundamental (G_TYPE_FLAGS, g_intern_static_string ("GFlags"), &info, &finfo,
G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_FLAGS);
}
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 4b76a6b..a50e2f3 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -389,6 +389,7 @@ _g_object_type_init (void)
*/
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_OBJECT, g_intern_static_string ("GObject"), &info, &finfo, 0);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_OBJECT);
g_value_register_transform_func (G_TYPE_OBJECT, G_TYPE_OBJECT, g_value_object_transform_value);
diff --git a/gobject/gparam.c b/gobject/gparam.c
index 301affb..79b71c0 100644
--- a/gobject/gparam.c
+++ b/gobject/gparam.c
@@ -137,6 +137,7 @@ _g_param_type_init (void)
*/
type = g_type_register_fundamental (G_TYPE_PARAM, g_intern_static_string ("GParam"), ¶m_spec_info,
&finfo, G_TYPE_FLAG_ABSTRACT);
g_assert (type == G_TYPE_PARAM);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_param_private_offset = g_type_add_instance_private (type, sizeof (GParamSpecPrivate));
g_value_register_transform_func (G_TYPE_PARAM, G_TYPE_PARAM, value_param_transform_value);
}
diff --git a/gobject/gparamspecs.c b/gobject/gparamspecs.c
index 449ad85..12d21d5 100644
--- a/gobject/gparamspecs.c
+++ b/gobject/gparamspecs.c
@@ -1166,13 +1166,14 @@ GType *g_param_spec_types = NULL;
void
_g_param_spec_types_init (void)
{
- const guint n_types = 23;
+ static GType types[23];
GType type, *spec_types, *spec_types_bound;
+ guint i;
- g_param_spec_types = g_new0 (GType, n_types);
+ g_param_spec_types = types;
spec_types = g_param_spec_types;
- spec_types_bound = g_param_spec_types + n_types;
-
+ spec_types_bound = g_param_spec_types + G_N_ELEMENTS (types);
+
/* G_TYPE_PARAM_CHAR
*/
{
@@ -1590,6 +1591,9 @@ _g_param_spec_types_init (void)
}
g_assert (spec_types == spec_types_bound);
+
+ for (i = 0; i < G_N_ELEMENTS (types); i++)
+ g_type_cleanup_push (G_CLEANUP_LIST, g_param_spec_types[i]);
}
/* --- GParamSpec initialization --- */
diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c
index f6be8de..196a232 100644
--- a/gobject/gsourceclosure.c
+++ b/gobject/gsourceclosure.c
@@ -47,6 +47,7 @@ g_io_condition_get_type (void)
{ 0, NULL, NULL }
};
etype = g_flags_register_static ("GIOCondition", values);
+ g_type_cleanup_push (G_CLEANUP_LIST, etype);
}
return etype;
}
diff --git a/gobject/gtype.c b/gobject/gtype.c
index 6cab710..bc3fd90 100644
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -4404,6 +4404,7 @@ gobject_init_ctor (void)
*/
node = type_node_fundamental_new_W (G_TYPE_NONE, g_intern_static_string ("void"), 0);
type = NODE_TYPE (node);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_NONE);
/* interface fundamental type G_TYPE_INTERFACE (!classed)
@@ -4412,6 +4413,7 @@ gobject_init_ctor (void)
node = type_node_fundamental_new_W (G_TYPE_INTERFACE, g_intern_static_string ("GInterface"),
G_TYPE_FLAG_DERIVABLE);
type = NODE_TYPE (node);
type_data_make_W (node, &info, NULL);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_assert (type == G_TYPE_INTERFACE);
G_WRITE_UNLOCK (&type_rw_lock);
diff --git a/gobject/gtype.h b/gobject/gtype.h
index 7522d06..cab0a96 100644
--- a/gobject/gtype.h
+++ b/gobject/gtype.h
@@ -1454,6 +1454,7 @@ guint g_type_get_type_registration_serial (void);
* sizeof (GtkGadget),
* (GInstanceInitFunc) gtk_gadget_init,
* 0);
+ * g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
* {
* const GInterfaceInfo g_implement_interface_info = {
* (GInterfaceInitFunc) gtk_gadget_gizmo_init
@@ -1701,6 +1702,7 @@ type_name##_get_type (void) \
sizeof (TypeName), \
(GInstanceInitFunc) type_name##_init, \
(GTypeFlags) flags); \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
{ /* custom code follows */
#define _G_DEFINE_TYPE_EXTENDED_END() \
/* following custom code */ \
@@ -1728,6 +1730,7 @@ type_name##_get_type (void) \
0, \
(GInstanceInitFunc)NULL, \
(GTypeFlags) 0); \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
if (TYPE_PREREQ) \
g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \
{ /* custom code follows */
@@ -1798,6 +1801,7 @@ type_name##_get_type (void) \
) = g_boxed_type_register_static; \
GType g_define_type_id = \
_g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
{ /* custom code follows */
#else
#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
@@ -1811,6 +1815,7 @@ type_name##_get_type (void) \
g_boxed_type_register_static (g_intern_static_string (#TypeName), \
(GBoxedCopyFunc) copy_func, \
(GBoxedFreeFunc) free_func); \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
{ /* custom code follows */
#endif /* __GNUC__ */
@@ -1850,6 +1855,7 @@ type_name##_get_type (void) \
{ \
GType g_define_type_id = \
g_pointer_type_register_static (g_intern_static_string (#TypeName)); \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
{ /* custom code follows */
/* --- protected (for fundamental type implementations) --- */
diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
index b1a663d..0efe92c 100644
--- a/gobject/gtypemodule.c
+++ b/gobject/gtypemodule.c
@@ -171,8 +171,8 @@ g_type_module_get_type (void)
};
type_module_type = g_type_register_static (G_TYPE_OBJECT, g_intern_static_string ("GTypeModule"),
&type_module_info, G_TYPE_FLAG_ABSTRACT);
-
g_type_add_interface_static (type_module_type, G_TYPE_TYPE_PLUGIN, &iface_info);
+ g_type_cleanup_push (G_CLEANUP_LIST, type_module_type);
}
return type_module_type;
diff --git a/gobject/gtypemodule.h b/gobject/gtypemodule.h
index 2580e1b..2af7df2 100644
--- a/gobject/gtypemodule.h
+++ b/gobject/gtypemodule.h
@@ -211,12 +211,15 @@ type_name##_register_type (GTypeModule *type_module) \
(GInstanceInitFunc) type_name##_init, \
NULL /* value_table */ \
}; \
+ GType previous = g_type_from_name (#TypeName); \
type_name##_type_id = g_type_module_register_type (type_module, \
TYPE_PARENT, \
#TypeName, \
&g_define_type_info, \
(GTypeFlags) flags); \
g_define_type_id = type_name##_type_id; \
+ if (!previous) \
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id); \
{ CODE ; } \
}
diff --git a/gobject/gtypeplugin.c b/gobject/gtypeplugin.c
index 192f6f9..6b5ce91 100644
--- a/gobject/gtypeplugin.c
+++ b/gobject/gtypeplugin.c
@@ -102,6 +102,7 @@ g_type_plugin_get_type (void)
};
type_plugin_type = g_type_register_static (G_TYPE_INTERFACE, g_intern_static_string ("GTypePlugin"),
&type_plugin_info, 0);
+ g_type_cleanup_push (G_CLEANUP_LIST, type_plugin_type);
}
return type_plugin_type;
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
index b986415..c4018d7 100644
--- a/gobject/gvaluetypes.c
+++ b/gobject/gvaluetypes.c
@@ -455,8 +455,10 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_CHAR, g_intern_static_string ("gchar"), &info, &finfo, 0);
g_assert (type == G_TYPE_CHAR);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
type = g_type_register_fundamental (G_TYPE_UCHAR, g_intern_static_string ("guchar"), &info, &finfo, 0);
g_assert (type == G_TYPE_UCHAR);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_BOOLEAN
@@ -475,6 +477,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_BOOLEAN, g_intern_static_string ("gboolean"), &info, &finfo,
0);
g_assert (type == G_TYPE_BOOLEAN);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_INT / G_TYPE_UINT
@@ -493,8 +496,10 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_INT, g_intern_static_string ("gint"), &info, &finfo, 0);
g_assert (type == G_TYPE_INT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
type = g_type_register_fundamental (G_TYPE_UINT, g_intern_static_string ("guint"), &info, &finfo, 0);
g_assert (type == G_TYPE_UINT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_LONG / G_TYPE_ULONG
@@ -513,8 +518,10 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_LONG, g_intern_static_string ("glong"), &info, &finfo, 0);
g_assert (type == G_TYPE_LONG);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
type = g_type_register_fundamental (G_TYPE_ULONG, g_intern_static_string ("gulong"), &info, &finfo, 0);
g_assert (type == G_TYPE_ULONG);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_INT64 / G_TYPE_UINT64
@@ -533,8 +540,10 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_INT64, g_intern_static_string ("gint64"), &info, &finfo, 0);
g_assert (type == G_TYPE_INT64);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
type = g_type_register_fundamental (G_TYPE_UINT64, g_intern_static_string ("guint64"), &info, &finfo, 0);
g_assert (type == G_TYPE_UINT64);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_FLOAT
@@ -553,6 +562,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_FLOAT, g_intern_static_string ("gfloat"), &info, &finfo, 0);
g_assert (type == G_TYPE_FLOAT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_DOUBLE
@@ -571,6 +581,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_DOUBLE, g_intern_static_string ("gdouble"), &info, &finfo, 0);
g_assert (type == G_TYPE_DOUBLE);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_STRING
@@ -589,6 +600,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_STRING, g_intern_static_string ("gchararray"), &info, &finfo,
0);
g_assert (type == G_TYPE_STRING);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_POINTER
@@ -607,6 +619,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_POINTER, g_intern_static_string ("gpointer"), &info, &finfo,
0);
g_assert (type == G_TYPE_POINTER);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
/* G_TYPE_VARIANT
@@ -625,6 +638,7 @@ _g_value_types_init (void)
info.value_table = &value_table;
type = g_type_register_fundamental (G_TYPE_VARIANT, g_intern_static_string ("GVariant"), &info, &finfo,
0);
g_assert (type == G_TYPE_VARIANT);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
}
}
diff --git a/gobject/tests/dynamictests.c b/gobject/tests/dynamictests.c
index a73037f..ebce94f 100644
--- a/gobject/tests/dynamictests.c
+++ b/gobject/tests/dynamictests.c
@@ -96,6 +96,7 @@ static GType test_module_get_type (void)
(GInstanceInitFunc)NULL
};
object_type = g_type_register_static (G_TYPE_TYPE_MODULE, "TestModule", &object_info, 0);
+ g_type_cleanup_push (G_CLEANUP_LIST, object_type);
}
return object_type;
}
diff --git a/gobject/tests/enums.c b/gobject/tests/enums.c
index 1054ee6..4702e8c 100644
--- a/gobject/tests/enums.c
+++ b/gobject/tests/enums.c
@@ -17,6 +17,7 @@ test_enum_basic (void)
GValue value = G_VALUE_INIT;
type = g_enum_register_static ("MyEnum", my_enum_values);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_value_init (&value, type);
g_assert (G_VALUE_HOLDS_ENUM (&value));
@@ -78,6 +79,7 @@ test_flags_basic (void)
GValue value = G_VALUE_INIT;
type = g_flags_register_static ("MyFlags", my_flag_values);
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
g_value_init (&value, type);
g_assert (G_VALUE_HOLDS_FLAGS (&value));
diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c
index c1cbafb..03d16a9 100644
--- a/gobject/tests/signals.c
+++ b/gobject/tests/signals.c
@@ -32,6 +32,7 @@ test_enum_get_type (void)
};
GType g_define_type_id =
g_enum_register_static (g_intern_static_string ("TestEnum"), values);
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -52,6 +53,7 @@ test_unsigned_enum_get_type (void)
};
GType g_define_type_id =
g_enum_register_static (g_intern_static_string ("TestUnsignedEnum"), values);
+ g_type_cleanup_push (G_CLEANUP_LIST, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -109,7 +111,9 @@ test_class_init (TestClass *klass)
guint s;
enum_type = g_enum_register_static ("MyEnum", my_enum_values);
+ g_type_cleanup_push (G_CLEANUP_LIST, enum_type);
flags_type = g_flags_register_static ("MyFlag", my_flag_values);
+ g_type_cleanup_push (G_CLEANUP_LIST, flags_type);
klass->all_types = all_types_handler;
diff --git a/gobject/tests/testcommon.h b/gobject/tests/testcommon.h
index 5aea796..a793ccd 100644
--- a/gobject/tests/testcommon.h
+++ b/gobject/tests/testcommon.h
@@ -48,6 +48,7 @@ prefix ## _get_type (void) \
object_type = g_type_register_static (parent_type, \
# name, \
&object_info, 0); \
+ g_type_cleanup_push (G_CLEANUP_LIST, object_type); \
interface_decl \
} \
\
@@ -79,6 +80,7 @@ prefix ## _get_type (void) \
iface_type = g_type_register_static (G_TYPE_INTERFACE, \
# name, \
&iface_info, 0); \
+ g_type_cleanup_push (G_CLEANUP_LIST, iface_type); \
} \
return iface_type; \
}
diff --git a/gobject/tests/type.c b/gobject/tests/type.c
index eee269f..f307c21 100644
--- a/gobject/tests/type.c
+++ b/gobject/tests/type.c
@@ -4,9 +4,11 @@ static void
test_registration_serial (void)
{
gint serial1, serial2, serial3;
+ GType type;
serial1 = g_type_get_type_registration_serial ();
- g_pointer_type_register_static ("my+pointer");
+ type = g_pointer_type_register_static ("my+pointer");
+ g_type_cleanup_push (G_CLEANUP_LIST, type);
serial2 = g_type_get_type_registration_serial ();
g_assert (serial1 != serial2);
serial3 = g_type_get_type_registration_serial ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]