From af017accc55aff3d6f28df0a41724e93fca71ff4 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 19 Aug 2009 15:48:19 +0200 Subject: [PATCH] Allocate GObjectNotifyQueue with g_slice instead of abusing g_list This is both cleaner and faster (it avoids function calls and zeroing the memory twice). Object construction performance improvement: Non-Threaded Threaded Simple: 11% 1.3% Complex: 8% 6% Other tests stable. https://bugzilla.gnome.org/show_bug.cgi?id=557100 --- gobject/gobjectnotifyqueue.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/gobject/gobjectnotifyqueue.c b/gobject/gobjectnotifyqueue.c index 1d5787b5c..56422c246 100644 --- a/gobject/gobjectnotifyqueue.c +++ b/gobject/gobjectnotifyqueue.c @@ -48,12 +48,8 @@ struct _GObjectNotifyQueue GSList *pspecs; guint16 n_pspecs; guint16 freeze_count; - /* currently, this structure abuses the GList allocation chain and thus - * must be <= sizeof (GList) - */ }; - /* --- functions --- */ static void g_object_notify_queue_free (gpointer data) @@ -61,7 +57,7 @@ g_object_notify_queue_free (gpointer data) GObjectNotifyQueue *nqueue = data; g_slist_free (nqueue->pspecs); - g_list_free_1 ((void*) nqueue); + g_slice_free (GObjectNotifyQueue, nqueue); } static inline GObjectNotifyQueue* @@ -73,8 +69,7 @@ g_object_notify_queue_freeze (GObject *object, nqueue = g_datalist_id_get_data (&object->qdata, context->quark_notify_queue); if (!nqueue) { - nqueue = (void*) g_list_alloc (); - memset (nqueue, 0, sizeof (*nqueue)); + nqueue = g_slice_new0 (GObjectNotifyQueue); nqueue->context = context; g_datalist_id_set_data_full (&object->qdata, context->quark_notify_queue, nqueue, g_object_notify_queue_free);