[glib/wip/gcleanup] gtype: Push all the basics GType's onto the cleanup list



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"), &param_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]