From: Olivier CrĂȘte Date: Thu, 22 Jul 2010 18:25:00 +0000 (+0200) Subject: notify: Refactor g_object_notify_queue_thaw() X-Git-Tag: 2.25.12~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83026092eba98c2e6e0a96112555f980382a99e7;hp=0201a81f04ae5fd46c6db25859e90dde1fc35d4b;p=platform%2Fupstream%2Fglib.git notify: Refactor g_object_notify_queue_thaw() This adds better error reporting and simplifies the code for adding thread safety. https://bugzilla.gnome.org/show_bug.cgi?id=166020 --- diff --git a/gobject/gobjectnotifyqueue.c b/gobject/gobjectnotifyqueue.c index fe82831..8492b47 100644 --- a/gobject/gobjectnotifyqueue.c +++ b/gobject/gobjectnotifyqueue.c @@ -96,11 +96,19 @@ g_object_notify_queue_thaw (GObject *object, guint n_pspecs = 0; g_return_if_fail (nqueue->freeze_count > 0); + g_return_if_fail (g_atomic_int_get(&object->ref_count) > 0); + + /* Just make sure we never get into some nasty race condition */ + if (G_UNLIKELY(nqueue->freeze_count == 0)) { + g_warning ("%s: property-changed notification for %s(%p) is not frozen", + G_STRFUNC, G_OBJECT_TYPE_NAME (object), object); + return; + } nqueue->freeze_count--; - if (nqueue->freeze_count) + if (nqueue->freeze_count) { return; - g_return_if_fail (object->ref_count > 0); + } pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem; /* set first entry to NULL since it's checked unconditionally */