Mercurial > pidgin
changeset 30738:0c090a41522c
Add ref/unref support to MsnUser.
author | masca@cpw.pidgin.im |
---|---|
date | Wed, 26 May 2010 23:25:39 +0000 |
parents | 1ba9f3167de0 |
children | f89094d6f8d5 |
files | libpurple/protocols/msn/user.c libpurple/protocols/msn/user.h |
diffstat | 2 files changed, 46 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/msn/user.c Wed May 26 20:01:05 2010 +0000 +++ b/libpurple/protocols/msn/user.c Wed May 26 23:25:39 2010 +0000 @@ -46,7 +46,7 @@ msn_user_set_passport(user, passport); msn_user_set_friendly_name(user, friendly_name); - return user; + return msn_user_ref(user); } /*destroy a user object*/ @@ -55,6 +55,11 @@ { g_return_if_fail(user != NULL); + if (user->refcount > 1) { + msn_user_unref(user); + return; + } + while (user->endpoints != NULL) { free_user_endpoint(user->endpoints->data); user->endpoints = g_slist_delete_link(user->endpoints, user->endpoints); @@ -94,6 +99,27 @@ g_free(user); } +MsnUser * +msn_user_ref(MsnUser *user) +{ + g_return_val_if_fail(user != NULL, NULL); + + user->refcount++; + + return user; +} + +void +msn_user_unref(MsnUser *user) +{ + g_return_if_fail(user != NULL); + + user->refcount--; + + if(user->refcount == 0) + msn_user_destroy(user); +} + void msn_user_update(MsnUser *user) {
--- a/libpurple/protocols/msn/user.h Wed May 26 20:01:05 2010 +0000 +++ b/libpurple/protocols/msn/user.h Wed May 26 23:25:39 2010 +0000 @@ -79,6 +79,8 @@ { MsnUserList *userlist; + guint8 refcount; /**< The reference count of this object */ + char *passport; /**< The passport account. */ char *friendly_name; /**< The friendly name. */ @@ -154,6 +156,23 @@ */ void msn_user_destroy(MsnUser *user); +/** + * Increment the reference count. + * + * @param user The user. + * + * @return user. + */ +MsnUser * +msn_user_ref(MsnUser *user); + +/** + * Decrement the reference count. + * + * @param user The user + */ +void +msn_user_unref(MsnUser *user); /** * Updates the user.