From 087d75e3c336547fff37a4bc5d33b1ad041485bf Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 7 Sep 2015 19:43:19 -0400 Subject: [PATCH] Make g_set_object more symmetric As argued in bug 748633, and order of ref, assign, unref is preferable. --- gobject/gobject.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/gobject/gobject.h b/gobject/gobject.h index a889d3cf8..32ab99733 100644 --- a/gobject/gobject.h +++ b/gobject/gobject.h @@ -690,21 +690,25 @@ static inline gboolean (g_set_object) (GObject **object_ptr, GObject *new_object) { + GObject *old_object = *object_ptr; + /* rely on g_object_[un]ref() to check the pointers are actually GObjects; * elide a (object_ptr != NULL) check because most of the time we will be * operating on struct members with a constant offset, so a NULL check would - * not catch bugs */ + * not catch bugs + */ - if (*object_ptr == new_object) + if (old_object == new_object) return FALSE; if (new_object != NULL) g_object_ref (new_object); - if (*object_ptr != NULL) - g_object_unref (*object_ptr); *object_ptr = new_object; + if (old_object != NULL) + g_object_unref (old_object); + return TRUE; }