[glib] Revert "gtype: disallow adding interfaces after the fact"



commit efa7b5f1e7d28e10d2c4413fc1626305f46706f5
Author: Rico Tzschichholz <ricotz t-online de>
Date:   Fri Jan 4 20:25:46 2013 +0100

    Revert "gtype: disallow adding interfaces after the fact"
    
    This reverts commit d6a075b0d8dfe4e4a41f6624ad7032d2163d420c.

 gobject/gtype.c             |    6 ------
 gobject/tests/threadtests.c |   20 ++++++++------------
 tests/gobject/Makefile.am   |    3 +++
 3 files changed, 11 insertions(+), 18 deletions(-)
---
diff --git a/gobject/gtype.c b/gobject/gtype.c
index 6df810c..0fae5c8 100644
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -1002,12 +1002,6 @@ check_add_interface_L (GType instance_type,
 		 NODE_NAME (node));
       return FALSE;
     }
-  if (node->data && node->data->class.class)
-    {
-      g_warning ("attempting to add an interface (%s) to class (%s) after class_init",
-                 NODE_NAME (iface), NODE_NAME (node));
-      return FALSE;
-    }
   tnode = lookup_type_node_I (NODE_PARENT_TYPE (iface));
   if (NODE_PARENT_TYPE (tnode) && !type_lookup_iface_entry_L (node, tnode))
     {
diff --git a/gobject/tests/threadtests.c b/gobject/tests/threadtests.c
index 37b6b70..fd33222 100644
--- a/gobject/tests/threadtests.c
+++ b/gobject/tests/threadtests.c
@@ -25,8 +25,6 @@
 
 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;
-static GMutex sync_mutex;
 
 #define NUM_COUNTER_INCREMENTS 100000
 
@@ -54,6 +52,10 @@ typedef GTypeInterface MyFace1Interface;
 static GType my_face1_get_type (void);
 G_DEFINE_INTERFACE (MyFace1, my_face1, G_TYPE_OBJECT);
 static void my_face1_default_init (MyFace1Interface *iface) { call_counter_init (iface); }
+typedef GTypeInterface MyFace2Interface;
+static GType my_face2_get_type (void);
+G_DEFINE_INTERFACE (MyFace2, my_face2, G_TYPE_OBJECT);
+static void my_face2_default_init (MyFace2Interface *iface) { call_counter_init (iface); }
 
 /* define 3 test objects, adding interfaces 0 & 1, and adding interface 2 after class initialization */
 typedef GObject         MyTester0;
@@ -67,14 +69,6 @@ static void my_tester0_init (MyTester0*t) {}
 static void my_tester0_class_init (MyTester0Class*c) { call_counter_init (c); }
 typedef GObject         MyTester1;
 typedef GObjectClass    MyTester1Class;
-
-/* Disabled for now (see https://bugzilla.gnome.org/show_bug.cgi?id=687659) */
-#if 0
-typedef GTypeInterface MyFace2Interface;
-static GType my_face2_get_type (void);
-G_DEFINE_INTERFACE (MyFace2, my_face2, G_TYPE_OBJECT);
-static void my_face2_default_init (MyFace2Interface *iface) { call_counter_init (iface); }
-
 static GType my_tester1_get_type (void);
 G_DEFINE_TYPE_WITH_CODE (MyTester1, my_tester1, G_TYPE_OBJECT,
                          G_IMPLEMENT_INTERFACE (my_face0_get_type(), interface_per_class_init);
@@ -92,6 +86,9 @@ G_DEFINE_TYPE_WITH_CODE (MyTester2, my_tester2, G_TYPE_OBJECT,
 static void my_tester2_init (MyTester2*t) {}
 static void my_tester2_class_init (MyTester2Class*c) { call_counter_init (c); }
 
+static GCond sync_cond;
+static GMutex sync_mutex;
+
 static gpointer
 tester_init_thread (gpointer data)
 {
@@ -143,7 +140,6 @@ test_threaded_class_init (void)
   /* ensure non-corrupted counter updates */
   g_assert_cmpint (g_atomic_int_get (&mtsafe_call_counter), ==, unsafe_call_counter);
 }
-#endif
 
 typedef struct {
   GObject parent;
@@ -341,7 +337,7 @@ main (int   argc,
 {
   g_test_init (&argc, &argv, NULL);
 
-  /* g_test_add_func ("/GObject/threaded-class-init", test_threaded_class_init); */
+  g_test_add_func ("/GObject/threaded-class-init", test_threaded_class_init);
   g_test_add_func ("/GObject/threaded-object-init", test_threaded_object_init);
   g_test_add_func ("/GObject/threaded-weak-ref", test_threaded_weak_ref);
 
diff --git a/tests/gobject/Makefile.am b/tests/gobject/Makefile.am
index 9679e05..63f2bcf 100644
--- a/tests/gobject/Makefile.am
+++ b/tests/gobject/Makefile.am
@@ -59,6 +59,9 @@ test_programs =					\
 	accumulator				\
 	defaultiface				\
 	dynamictype				\
+	ifacecheck				\
+	ifaceinit				\
+	ifaceinherit				\
 	override				\
 	performance				\
 	performance-threaded			\



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]