/soc/2013/ankitkv/gobjectification: 894c29e33300: Move all objec...

Ankit Vani a at nevitus.org
Tue Oct 1 08:11:57 EDT 2013


Changeset: 894c29e3330046a6522b36c791886010eb1ff651
Author:	 Ankit Vani <a at nevitus.org>
Date:	 2013-10-01 17:29 +0530
Branch:	 soc.2013.gobjectification
URL: https://hg.pidgin.im/soc/2013/ankitkv/gobjectification/rev/894c29e33300

Description:

Move all object destruction code to finalize() methods and keep unrefs in dispose()

diffstat:

 libpurple/account.c           |  37 +++++++++-------
 libpurple/blistnodetypes.c    |  72 ++++++++++++--------------------
 libpurple/buddylist.c         |  12 +----
 libpurple/connection.c        |  18 +------
 libpurple/conversation.c      |  35 +++------------
 libpurple/conversationtypes.c |  95 +++++++++++++++++++++++-------------------
 libpurple/presence.c          |  12 +++-
 libpurple/roomlist.c          |  20 ++------
 libpurple/status.c            |  14 +----
 libpurple/whiteboard.c        |  14 +-----
 libpurple/xfer.c              |  45 ++++++++------------
 11 files changed, 149 insertions(+), 225 deletions(-)

diffs (truncated from 796 to 300 lines):

diff --git a/libpurple/account.c b/libpurple/account.c
--- a/libpurple/account.c
+++ b/libpurple/account.c
@@ -2947,6 +2947,24 @@ purple_account_constructed(GObject *obje
 static void
 purple_account_dispose(GObject *object)
 {
+	PurpleAccount *account = PURPLE_ACCOUNT(object);
+	PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
+
+	if (!purple_account_is_disconnected(account))
+		purple_account_disconnect(account);
+
+	if (priv->presence) {
+		g_object_unref(priv->presence);
+		priv->presence = NULL;
+	}
+
+	parent_class->dispose(object);
+}
+
+/* GObject finalize function */
+static void
+purple_account_finalize(GObject *object)
+{
 	GList *l;
 	PurpleAccount *account = PURPLE_ACCOUNT(object);
 	PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
@@ -2968,30 +2986,15 @@ purple_account_dispose(GObject *object)
 	if (priv->proxy_info)
 		purple_proxy_info_destroy(priv->proxy_info);
 
-	if (priv->presence)
-		g_object_unref(priv->presence);
-
 	if(priv->system_log)
 		purple_log_free(priv->system_log);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error);
 	if (priv->current_error) {
 		g_free(priv->current_error->description);
 		g_free(priv->current_error);
 	}
 
-	PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error);
-	PURPLE_DBUS_UNREGISTER_POINTER(account);
-
-	parent_class->dispose(object);
-}
-
-/* GObject finalize function */
-static void
-purple_account_finalize(GObject *object)
-{
-	PurpleAccount *account = PURPLE_ACCOUNT(object);
-	PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
-
 	g_free(priv->username);
 	g_free(priv->alias);
 	purple_str_wipe(priv->password);
@@ -3012,6 +3015,8 @@ purple_account_finalize(GObject *object)
 		priv->permit = g_slist_delete_link(priv->permit, priv->permit);
 	}
 
+	PURPLE_DBUS_UNREGISTER_POINTER(account);
+
 	parent_class->finalize(object);
 }
 
diff --git a/libpurple/blistnodetypes.c b/libpurple/blistnodetypes.c
--- a/libpurple/blistnodetypes.c
+++ b/libpurple/blistnodetypes.c
@@ -623,6 +623,25 @@ purple_buddy_constructed(GObject *object
 static void
 purple_buddy_dispose(GObject *object)
 {
+	PurpleBuddyPrivate *priv = PURPLE_BUDDY_GET_PRIVATE(object);
+
+	if (priv->icon) {
+		purple_buddy_icon_unref(priv->icon);
+		priv->icon = NULL;
+	}
+
+	if (priv->presence) {
+		g_object_unref(priv->presence);
+		priv->presence = NULL;
+	}
+
+	G_OBJECT_CLASS(blistnode_parent_class)->dispose(object);
+}
+
+/* GObject finalize function */
+static void
+purple_buddy_finalize(GObject *object)
+{
 	PurpleBuddy *buddy = PURPLE_BUDDY(object);
 	PurpleBuddyPrivate *priv = PURPLE_BUDDY_GET_PRIVATE(buddy);
 	PurplePlugin *prpl;
@@ -639,25 +658,12 @@ purple_buddy_dispose(GObject *object)
 			prpl_info->buddy_free(buddy);
 	}
 
-	/* Delete the node */
-	purple_buddy_icon_unref(priv->icon);
-	g_object_unref(priv->presence);
-
-	PURPLE_DBUS_UNREGISTER_POINTER(buddy);
-
-	G_OBJECT_CLASS(blistnode_parent_class)->dispose(object);
-}
-
-/* GObject finalize function */
-static void
-purple_buddy_finalize(GObject *object)
-{
-	PurpleBuddyPrivate *priv = PURPLE_BUDDY_GET_PRIVATE(object);
-
 	g_free(priv->name);
 	g_free(priv->local_alias);
 	g_free(priv->server_alias);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(buddy);
+
 	G_OBJECT_CLASS(blistnode_parent_class)->finalize(object);
 }
 
@@ -1017,21 +1023,14 @@ purple_contact_init(GTypeInstance *insta
 	PURPLE_DBUS_REGISTER_POINTER(contact, PurpleContact);
 }
 
-/* GObject dispose function */
-static void
-purple_contact_dispose(GObject *object)
-{
-	PURPLE_DBUS_UNREGISTER_POINTER(object);
-
-	G_OBJECT_CLASS(counting_parent_class)->dispose(object);
-}
-
 /* GObject finalize function */
 static void
 purple_contact_finalize(GObject *object)
 {
 	g_free(PURPLE_CONTACT_GET_PRIVATE(object)->alias);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(object);
+
 	G_OBJECT_CLASS(counting_parent_class)->finalize(object);
 }
 
@@ -1042,7 +1041,6 @@ static void purple_contact_class_init(Pu
 
 	counting_parent_class = g_type_class_peek_parent(klass);
 
-	obj_class->dispose = purple_contact_dispose;
 	obj_class->finalize = purple_contact_finalize;
 
 	/* Setup properties */
@@ -1281,15 +1279,6 @@ purple_chat_constructed(GObject *object)
 		ops->new_node(PURPLE_BLIST_NODE(chat));
 }
 
-/* GObject dispose function */
-static void
-purple_chat_dispose(GObject *object)
-{
-	PURPLE_DBUS_UNREGISTER_POINTER(object);
-
-	G_OBJECT_CLASS(blistnode_parent_class)->dispose(object);
-}
-
 /* GObject finalize function */
 static void
 purple_chat_finalize(GObject *object)
@@ -1299,6 +1288,8 @@ purple_chat_finalize(GObject *object)
 	g_free(priv->alias);
 	g_hash_table_destroy(priv->components);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(object);
+
 	G_OBJECT_CLASS(blistnode_parent_class)->finalize(object);
 }
 
@@ -1309,7 +1300,6 @@ static void purple_chat_class_init(Purpl
 
 	blistnode_parent_class = g_type_class_peek_parent(klass);
 
-	obj_class->dispose = purple_chat_dispose;
 	obj_class->finalize = purple_chat_finalize;
 
 	/* Setup properties */
@@ -1634,21 +1624,14 @@ purple_group_constructed(GObject *object
 		ops->new_node(PURPLE_BLIST_NODE(group));
 }
 
-/* GObject dispose function */
-static void
-purple_group_dispose(GObject *object)
-{
-	PURPLE_DBUS_UNREGISTER_POINTER(object);
-
-	G_OBJECT_CLASS(counting_parent_class)->dispose(object);
-}
-
 /* GObject finalize function */
 static void
 purple_group_finalize(GObject *object)
 {
 	g_free(PURPLE_GROUP_GET_PRIVATE(object)->name);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(object);
+
 	G_OBJECT_CLASS(counting_parent_class)->finalize(object);
 }
 
@@ -1659,7 +1642,6 @@ static void purple_group_class_init(Purp
 
 	counting_parent_class = g_type_class_peek_parent(klass);
 
-	obj_class->dispose = purple_group_dispose;
 	obj_class->finalize = purple_group_finalize;
 	obj_class->constructed = purple_group_constructed;
 
diff --git a/libpurple/buddylist.c b/libpurple/buddylist.c
--- a/libpurple/buddylist.c
+++ b/libpurple/buddylist.c
@@ -2048,21 +2048,14 @@ purple_buddy_list_init(GTypeInstance *in
 					 (GDestroyNotify)_purple_blist_hbuddy_free_key, NULL);
 }
 
-/* GObject dispose function */
-static void
-purple_buddy_list_dispose(GObject *object)
-{
-	PURPLE_DBUS_UNREGISTER_POINTER(object);
-
-	G_OBJECT_CLASS(parent_class)->dispose(object);
-}
-
 /* GObject finalize function */
 static void
 purple_buddy_list_finalize(GObject *object)
 {
 	g_hash_table_destroy(PURPLE_BUDDY_LIST_GET_PRIVATE(object)->buddies);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(object);
+
 	G_OBJECT_CLASS(parent_class)->finalize(object);
 }
 
@@ -2073,7 +2066,6 @@ static void purple_buddy_list_class_init
 
 	parent_class = g_type_class_peek_parent(klass);
 
-	obj_class->dispose = purple_buddy_list_dispose;
 	obj_class->finalize = purple_buddy_list_finalize;
 
 	g_type_class_add_private(klass, sizeof(PurpleBuddyListPrivate));
diff --git a/libpurple/connection.c b/libpurple/connection.c
--- a/libpurple/connection.c
+++ b/libpurple/connection.c
@@ -694,9 +694,9 @@ purple_connection_constructed(GObject *o
 	purple_signal_emit(purple_connections_get_handle(), "signing-on", gc);
 }
 
-/* GObject dispose function */
+/* GObject finalize function */
 static void
-purple_connection_dispose(GObject *object)
+purple_connection_finalize(GObject *object)
 {
 	PurpleConnection *gc = PURPLE_CONNECTION(object);
 	PurpleConnectionPrivate *priv = PURPLE_CONNECTION_GET_PRIVATE(gc);
@@ -759,20 +759,11 @@ purple_connection_dispose(GObject *objec
 	if (priv->disconnect_timeout > 0)
 		purple_timeout_remove(priv->disconnect_timeout);
 
-	PURPLE_DBUS_UNREGISTER_POINTER(gc);
-
-	G_OBJECT_CLASS(parent_class)->dispose(object);
-}
-
-/* GObject finalize function */
-static void
-purple_connection_finalize(GObject *object)
-{
-	PurpleConnectionPrivate *priv = PURPLE_CONNECTION_GET_PRIVATE(object);
-
 	purple_str_wipe(priv->password);
 	g_free(priv->display_name);
 
+	PURPLE_DBUS_UNREGISTER_POINTER(gc);
+
 	G_OBJECT_CLASS(parent_class)->finalize(object);
 }
 
@@ -783,7 +774,6 @@ static void purple_connection_class_init
 
 	parent_class = g_type_class_peek_parent(klass);
 



More information about the Commits mailing list