1#include <unistd.h> 2#include <glib.h> 3#include <glib-object.h> 4 5#define G_TYPE_TEST (my_test_get_type ()) 6#define MY_TEST(test) (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest)) 7#define MY_IS_TEST(test) (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST)) 8#define MY_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass)) 9#define MY_IS_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST)) 10#define MY_TEST_GET_CLASS(test) (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass)) 11 12typedef struct _GTest GTest; 13typedef struct _GTestClass GTestClass; 14 15struct _GTest 16{ 17 GObject object; 18}; 19 20struct _GTestClass 21{ 22 GObjectClass parent_class; 23}; 24 25static GType my_test_get_type (void); 26 27static void my_test_class_init (GTestClass * klass); 28static void my_test_init (GTest * test); 29static void my_test_dispose (GObject * object); 30 31static GObjectClass *parent_class = NULL; 32 33static GType 34my_test_get_type (void) 35{ 36 static GType test_type = 0; 37 38 if (!test_type) { 39 static const GTypeInfo test_info = { 40 sizeof (GTestClass), 41 NULL, 42 NULL, 43 (GClassInitFunc) my_test_class_init, 44 NULL, 45 NULL, 46 sizeof (GTest), 47 0, 48 (GInstanceInitFunc) my_test_init, 49 NULL 50 }; 51 52 test_type = g_type_register_static (G_TYPE_OBJECT, "GTest", 53 &test_info, 0); 54 } 55 return test_type; 56} 57 58static void 59my_test_class_init (GTestClass * klass) 60{ 61 GObjectClass *gobject_class; 62 63 gobject_class = (GObjectClass *) klass; 64 65 parent_class = g_type_class_ref (G_TYPE_OBJECT); 66 67 gobject_class->dispose = my_test_dispose; 68} 69 70static void 71my_test_init (GTest * test) 72{ 73 g_print ("init %p\n", test); 74} 75 76static void 77my_test_dispose (GObject * object) 78{ 79 GTest *test; 80 81 test = MY_TEST (object); 82 83 g_print ("dispose %p!\n", object); 84 85 G_OBJECT_CLASS (parent_class)->dispose (object); 86} 87 88static void 89my_test_do_refcount (GTest * test) 90{ 91 static guint i = 1; 92 if (i++ % 100000 == 0) 93 g_print ("."); 94 g_object_ref (test); 95 g_object_unref (test); 96} 97 98int 99main (int argc, char **argv) 100{ 101 gint i; 102 GTest *test; 103 104 g_thread_init (NULL); 105 g_print ("START: %s\n", argv[0]); 106 g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK)); 107 g_type_init (); 108 109 test = g_object_new (G_TYPE_TEST, NULL); 110 111 for (i=0; i<100000000; i++) { 112 my_test_do_refcount (test); 113 } 114 115 g_print ("\n"); 116 117 return 0; 118} 119