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
This commit is contained in:
Olivier Crête 2010-07-22 20:25:00 +02:00 committed by Benjamin Otte
parent 0201a81f04
commit 83026092eb

View File

@ -96,11 +96,19 @@ g_object_notify_queue_thaw (GObject *object,
guint n_pspecs = 0; guint n_pspecs = 0;
g_return_if_fail (nqueue->freeze_count > 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--; nqueue->freeze_count--;
if (nqueue->freeze_count) if (nqueue->freeze_count) {
return; return;
g_return_if_fail (object->ref_count > 0); }
pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem; 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 */ /* set first entry to NULL since it's checked unconditionally */