[glib/wip/gcleanup: 31/71] gtype: Push registered GType onto the appropriate cleanup list
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/gcleanup: 31/71] gtype: Push registered GType onto the appropriate cleanup list
- Date: Wed, 13 Nov 2013 11:36:52 +0000 (UTC)
commit 6f60e9450919babec1d50aacaade066bf462f62f
Author: Stef Walter <stefw gnome org>
Date: Thu Nov 7 22:52:18 2013 +0100
gtype: Push registered GType onto the appropriate cleanup list
When G_CLEANUP_SCOPE is defined the G_DEFINE_TYPE and macros
properly push newly registered GTypes onto the cleanup list.
In addition push all the the basic types into the libgobject
cleanup list.
https://bugzilla.gnome.org/show_bug.cgi?id=711778
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 | 13 +++++++++++++
gobject/gtypemodule.c | 2 +-
gobject/gtypemodule.h | 3 +++
gobject/gtypeplugin.c | 1 +
gobject/gvaluetypes.c | 14 ++++++++++++++
gobject/tests/Makefile.am | 2 +-
gobject/tests/binding.c | 2 ++
gobject/tests/boxed.c | 2 ++
gobject/tests/dynamictests.c | 3 +++
gobject/tests/enums.c | 4 ++++
gobject/tests/ifaceproperties.c | 2 ++
gobject/tests/object.c | 2 ++
gobject/tests/param.c | 2 ++
gobject/tests/private.c | 2 ++
gobject/tests/properties.c | 2 ++
gobject/tests/reference.c | 2 ++
gobject/tests/signals.c | 6 ++++++
gobject/tests/testcommon.h | 2 ++
gobject/tests/threadtests.c | 2 ++
gobject/tests/type.c | 6 +++++-
tests/gobject/Makefile.am | 2 +-
tests/gobject/deftype.c | 2 ++
tests/gobject/dynamictype.c | 2 ++
tests/gobject/performance.c | 2 ++
tests/gobject/references.c | 2 ++
tests/gobject/singleton.c | 2 ++
34 files changed, 100 insertions(+), 9 deletions(-)
---
diff --git a/gobject/gbinding.c b/gobject/gbinding.c
index c8c8fa3..f6eaf4f 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_cleanup_push_type (G_CLEANUP_SCOPE, 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..879480c 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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..b3399fa 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
g_assert (type == G_TYPE_FLAGS);
}
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 92023ae..b15cb52 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_cleanup_push_type (G_CLEANUP_SCOPE, 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..0e1bbab 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_cleanup_push_type (G_CLEANUP_SCOPE, 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..63dcc69 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_cleanup_push_type (G_CLEANUP_SCOPE, g_param_spec_types[i]);
}
/* --- GParamSpec initialization --- */
diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c
index f6be8de..145d99f 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_cleanup_push_type (G_CLEANUP_SCOPE, etype);
}
return etype;
}
diff --git a/gobject/gtype.c b/gobject/gtype.c
index ef617c3..3ee5485 100644
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -4381,6 +4381,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_cleanup_push_type (G_CLEANUP_SCOPE, type);
g_assert (type == G_TYPE_NONE);
/* interface fundamental type G_TYPE_INTERFACE (!classed)
@@ -4389,6 +4390,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_cleanup_push_type (G_CLEANUP_SCOPE, type);
g_assert (type == G_TYPE_INTERFACE);
G_WRITE_UNLOCK (&type_rw_lock);
diff --git a/gobject/gtype.h b/gobject/gtype.h
index 2c4bcbc..e4abe23 100644
--- a/gobject/gtype.h
+++ b/gobject/gtype.h
@@ -1451,6 +1451,7 @@ guint g_type_get_type_registration_serial (void);
* sizeof (GtkGadget),
* (GInstanceInitFunc) gtk_gadget_init,
* 0);
+ * g_cleanup_push_type (g_define_type_id, G_CLEANUP_SCOPE); \
* {
* const GInterfaceInfo g_implement_interface_info = {
* (GInterfaceInitFunc) gtk_gadget_gizmo_init
@@ -1669,6 +1670,13 @@ static void type_name##_class_intern_init (gpointer klass) \
}
#endif /* GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 */
+/* Cleanup the type in the module within which it was defined */
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_40
+#define _G_DEFINE_TYPE_CLEANUP() g_cleanup_push_type (G_CLEANUP_SCOPE, g_define_type_id)
+#else
+#define _G_DEFINE_TYPE_CLEANUP()
+#endif
+
#define _G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PARENT, flags) \
\
static void type_name##_init (TypeName *self); \
@@ -1698,6 +1706,7 @@ type_name##_get_type (void) \
sizeof (TypeName), \
(GInstanceInitFunc) type_name##_init, \
(GTypeFlags) flags); \
+ _G_DEFINE_TYPE_CLEANUP (); \
{ /* custom code follows */
#define _G_DEFINE_TYPE_EXTENDED_END() \
/* following custom code */ \
@@ -1725,6 +1734,7 @@ type_name##_get_type (void) \
0, \
(GInstanceInitFunc)NULL, \
(GTypeFlags) 0); \
+ _G_DEFINE_TYPE_CLEANUP (); \
if (TYPE_PREREQ) \
g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \
{ /* custom code follows */
@@ -1795,6 +1805,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_DEFINE_TYPE_CLEANUP (); \
{ /* custom code follows */
#else
#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
@@ -1808,6 +1819,7 @@ type_name##_get_type (void) \
g_boxed_type_register_static (g_intern_static_string (#TypeName), \
(GBoxedCopyFunc) copy_func, \
(GBoxedFreeFunc) free_func); \
+ _G_DEFINE_TYPE_CLEANUP (); \
{ /* custom code follows */
#endif /* __GNUC__ */
@@ -1847,6 +1859,7 @@ type_name##_get_type (void) \
{ \
GType g_define_type_id = \
g_pointer_type_register_static (g_intern_static_string (#TypeName)); \
+ _G_DEFINE_TYPE_CLEANUP (); \
{ /* custom code follows */
/* --- protected (for fundamental type implementations) --- */
diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
index b1a663d..6e55456 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_cleanup_push_type (G_CLEANUP_SCOPE, type_module_type);
}
return type_module_type;
diff --git a/gobject/gtypemodule.h b/gobject/gtypemodule.h
index 2580e1b..c60347d 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_cleanup_push_type (G_CLEANUP_SCOPE, g_define_type_id); \
{ CODE ; } \
}
diff --git a/gobject/gtypeplugin.c b/gobject/gtypeplugin.c
index 192f6f9..1dcb03d 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_cleanup_push_type (G_CLEANUP_SCOPE, type_plugin_type);
}
return type_plugin_type;
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
index b986415..68854a4 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
type = g_type_register_fundamental (G_TYPE_UCHAR, g_intern_static_string ("guchar"), &info, &finfo, 0);
g_assert (type == G_TYPE_UCHAR);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
type = g_type_register_fundamental (G_TYPE_UINT, g_intern_static_string ("guint"), &info, &finfo, 0);
g_assert (type == G_TYPE_UINT);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
type = g_type_register_fundamental (G_TYPE_ULONG, g_intern_static_string ("gulong"), &info, &finfo, 0);
g_assert (type == G_TYPE_ULONG);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
type = g_type_register_fundamental (G_TYPE_UINT64, g_intern_static_string ("guint64"), &info, &finfo, 0);
g_assert (type == G_TYPE_UINT64);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, type);
}
}
diff --git a/gobject/tests/Makefile.am b/gobject/tests/Makefile.am
index 2c5cc1a..bf1884d 100644
--- a/gobject/tests/Makefile.am
+++ b/gobject/tests/Makefile.am
@@ -2,7 +2,7 @@ include $(top_srcdir)/glib-tap.mk
LDADD = ../libgobject-2.0.la $(top_builddir)/glib/libglib-2.0.la
AM_CPPFLAGS = -g $(gobject_INCLUDES) $(GLIB_DEBUG_FLAGS)
-DEFS = -DG_LOG_DOMAIN=\"GLib-GObject\"
+DEFS = -DG_LOG_DOMAIN=\"GLib-GObject\" -DG_CLEANUP_SCOPE=gobject_tests_cleanup
AM_CFLAGS = $(GLIB_WARN_CFLAGS)
# -----------------------------------------------------------------------------
diff --git a/gobject/tests/binding.c b/gobject/tests/binding.c
index 5f87e84..0086703 100644
--- a/gobject/tests/binding.c
+++ b/gobject/tests/binding.c
@@ -2,6 +2,8 @@
#include <gstdio.h>
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
typedef struct _BindingSource
{
GObject parent_instance;
diff --git a/gobject/tests/boxed.c b/gobject/tests/boxed.c
index 70e3ea7..9c9c46d 100644
--- a/gobject/tests/boxed.c
+++ b/gobject/tests/boxed.c
@@ -2,6 +2,8 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
typedef struct _MyBoxed MyBoxed;
struct _MyBoxed
diff --git a/gobject/tests/dynamictests.c b/gobject/tests/dynamictests.c
index a052e1a..e222d34 100644
--- a/gobject/tests/dynamictests.c
+++ b/gobject/tests/dynamictests.c
@@ -25,6 +25,8 @@
/* This test tests the macros for defining dynamic types.
*/
+G_CLEANUP_DEFINE;
+
static GMutex sync_mutex;
static gboolean loaded = FALSE;
@@ -96,6 +98,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_cleanup_push_type (G_CLEANUP_SCOPE, object_type);
}
return object_type;
}
diff --git a/gobject/tests/enums.c b/gobject/tests/enums.c
index 84ffed7..bbb2c11 100644
--- a/gobject/tests/enums.c
+++ b/gobject/tests/enums.c
@@ -1,5 +1,7 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
static const GEnumValue my_enum_values[] =
{
{ 1, "the first value", "one" },
@@ -17,6 +19,7 @@ test_enum_basic (void)
GValue value = G_VALUE_INIT;
type = g_enum_register_static ("MyEnum", my_enum_values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, type);
g_value_init (&value, type);
g_assert (G_VALUE_HOLDS_ENUM (&value));
@@ -80,6 +83,7 @@ test_flags_basic (void)
GValue value = G_VALUE_INIT;
type = g_flags_register_static ("MyFlags", my_flag_values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, type);
g_value_init (&value, type);
g_assert (G_VALUE_HOLDS_FLAGS (&value));
diff --git a/gobject/tests/ifaceproperties.c b/gobject/tests/ifaceproperties.c
index 1fba57e..97dcfd6 100644
--- a/gobject/tests/ifaceproperties.c
+++ b/gobject/tests/ifaceproperties.c
@@ -35,6 +35,8 @@
* prop4: Defined in BaseObject, Overridden in DerivedObject
*/
+G_CLEANUP_DEFINE;
+
static GType base_object_get_type (void);
static GType derived_object_get_type (void);
diff --git a/gobject/tests/object.c b/gobject/tests/object.c
index 63c85a8..9e05df4 100644
--- a/gobject/tests/object.c
+++ b/gobject/tests/object.c
@@ -1,5 +1,7 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
/* --------------------------------- */
/* test_object_constructor_singleton */
diff --git a/gobject/tests/param.c b/gobject/tests/param.c
index 92948a9..b3e9bd4 100644
--- a/gobject/tests/param.c
+++ b/gobject/tests/param.c
@@ -2,6 +2,8 @@
#include <glib-object.h>
#include <stdlib.h>
+G_CLEANUP_DEFINE;
+
static void
test_param_value (void)
{
diff --git a/gobject/tests/private.c b/gobject/tests/private.c
index 80ef9fc..edf4314 100644
--- a/gobject/tests/private.c
+++ b/gobject/tests/private.c
@@ -1,5 +1,7 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
typedef struct {
GObject parent_instance;
} TestObject;
diff --git a/gobject/tests/properties.c b/gobject/tests/properties.c
index 7140f90..59415fe 100644
--- a/gobject/tests/properties.c
+++ b/gobject/tests/properties.c
@@ -2,6 +2,8 @@
#include <gstdio.h>
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
typedef struct _TestObject {
GObject parent_instance;
gint foo;
diff --git a/gobject/tests/reference.c b/gobject/tests/reference.c
index 0742339..5965e4b 100644
--- a/gobject/tests/reference.c
+++ b/gobject/tests/reference.c
@@ -1,5 +1,7 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
static void
test_fundamentals (void)
{
diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c
index a8ff35b..462906d 100644
--- a/gobject/tests/signals.c
+++ b/gobject/tests/signals.c
@@ -1,6 +1,8 @@
#include <glib-object.h>
#include "marshalers.h"
+G_CLEANUP_DEFINE;
+
typedef enum {
TEST_ENUM_NEGATIVE = -30,
TEST_ENUM_NONE = 0,
@@ -32,6 +34,7 @@ test_enum_get_type (void)
};
GType g_define_type_id =
g_enum_register_static (g_intern_static_string ("TestEnum"), values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -52,6 +55,7 @@ test_unsigned_enum_get_type (void)
};
GType g_define_type_id =
g_enum_register_static (g_intern_static_string ("TestUnsignedEnum"), values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, g_define_type_id);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -109,7 +113,9 @@ test_class_init (TestClass *klass)
guint s;
enum_type = g_enum_register_static ("MyEnum", my_enum_values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, enum_type);
flags_type = g_flags_register_static ("MyFlag", my_flag_values);
+ g_cleanup_push_type (G_CLEANUP_SCOPE, flags_type);
klass->all_types = all_types_handler;
diff --git a/gobject/tests/testcommon.h b/gobject/tests/testcommon.h
index 7bfef05..603e35b 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_cleanup_push_type (G_CLEANUP_SCOPE, 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_cleanup_push_type (G_CLEANUP_SCOPE, iface_type); \
} \
return iface_type; \
}
diff --git a/gobject/tests/threadtests.c b/gobject/tests/threadtests.c
index e075c57..30ae183 100644
--- a/gobject/tests/threadtests.c
+++ b/gobject/tests/threadtests.c
@@ -23,6 +23,8 @@
#include <glib.h>
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
static volatile int mtsafe_call_counter = 0; /* multi thread safe call counter */
static int unsafe_call_counter = 0; /* single-threaded call counter */
static GCond sync_cond;
diff --git a/gobject/tests/type.c b/gobject/tests/type.c
index 1abe482..e14e3f3 100644
--- a/gobject/tests/type.c
+++ b/gobject/tests/type.c
@@ -1,12 +1,16 @@
#include <glib-object.h>
+G_CLEANUP_DEFINE;
+
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_cleanup_push_type (G_CLEANUP_SCOPE, type);
serial2 = g_type_get_type_registration_serial ();
g_assert (serial1 != serial2);
serial3 = g_type_get_type_registration_serial ();
diff --git a/tests/gobject/Makefile.am b/tests/gobject/Makefile.am
index 84f7410..af2f0b5 100644
--- a/tests/gobject/Makefile.am
+++ b/tests/gobject/Makefile.am
@@ -2,7 +2,7 @@ include $(top_srcdir)/glib.mk
LDADD = $(top_builddir)/glib/libglib-2.0.la $(top_builddir)/gobject/libgobject-2.0.la
AM_CPPFLAGS = $(gmodule_INCLUDES) $(GLIB_DEBUG_FLAGS)
-DEFS = -DGLIB_DISABLE_DEPRECATION_WARNINGS -DG_LOG_DOMAIN=\"GLib\"
+DEFS = -DGLIB_DISABLE_DEPRECATION_WARNINGS -DG_LOG_DOMAIN=\"GLib\" -DG_CLEANUP_SCOPE=gobject_tests_cleanup
AM_CFLAGS = -g
# So far, only two gtester-ified cases
diff --git a/tests/gobject/deftype.c b/tests/gobject/deftype.c
index 232feff..32f7acf 100644
--- a/tests/gobject/deftype.c
+++ b/tests/gobject/deftype.c
@@ -20,6 +20,8 @@
/* see http://bugzilla.gnome.org/show_bug.cgi?id=337128 for the purpose of this test */
+G_CLEANUP_DEFINE;
+
#define MY_G_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) { \
const GInterfaceInfo g_implement_interface_info = { \
(GInterfaceInitFunc) iface_init, \
diff --git a/tests/gobject/dynamictype.c b/tests/gobject/dynamictype.c
index b527608..bc003a1 100644
--- a/tests/gobject/dynamictype.c
+++ b/tests/gobject/dynamictype.c
@@ -32,6 +32,8 @@
/* This test tests the macros for defining dynamic types.
*/
+G_CLEANUP_DEFINE;
+
static gboolean loaded = FALSE;
struct _TestIfaceClass
diff --git a/tests/gobject/performance.c b/tests/gobject/performance.c
index fdc51da..d96c01b 100644
--- a/tests/gobject/performance.c
+++ b/tests/gobject/performance.c
@@ -22,6 +22,8 @@
#include <glib-object.h>
#include "testcommon.h"
+G_CLEANUP_DEFINE;
+
#define WARM_UP_N_RUNS 50
#define ESTIMATE_ROUND_TIME_N_RUNS 5
#define DEFAULT_TEST_TIME 15 /* seconds */
diff --git a/tests/gobject/references.c b/tests/gobject/references.c
index cfedfa9..398bf1c 100644
--- a/tests/gobject/references.c
+++ b/tests/gobject/references.c
@@ -29,6 +29,8 @@
/* This test tests weak and toggle references
*/
+G_CLEANUP_DEFINE;
+
static GObject *global_object;
static gboolean object_destroyed;
diff --git a/tests/gobject/singleton.c b/tests/gobject/singleton.c
index abf1a0b..ac53031 100644
--- a/tests/gobject/singleton.c
+++ b/tests/gobject/singleton.c
@@ -21,6 +21,8 @@
#include <glib-object.h>
#include <string.h>
+G_CLEANUP_DEFINE;
+
/* --- MySingleton class --- */
typedef struct {
GObject parent_instance;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]