summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Atallah <datallah@pidgin.im>2010-01-07 23:47:00 +0000
committerDaniel Atallah <datallah@pidgin.im>2010-01-07 23:47:00 +0000
commitc7301aa1bd1c0e46aeded4f79e3a56c75d860081 (patch)
treeb75841c258429452a57624b3c60cc20730f558f4
parent18238da77577fd0db57a0492dd8f3cae1d8ff4d5 (diff)
downloadpidgin-c7301aa1bd1c0e46aeded4f79e3a56c75d860081.tar.gz
*** Plucked rev d1026e37e4b82add833d2a302a41c8f84e4e2bbb (cc475d6ed3e62e0458659c41bb58ac72f63d88c9):
Fix a crash when disconnecting with a pending buddy icon fetch request. We weren't canceling our asynchronous URL fetch *** Plucked rev 03d1409613057bd402e5659d936f59a6d201a93e (cc475d6ed3e62e0458659c41bb58ac72f63d88c9): Two changes: 1. If we're about to make another request to fetch an icon then cancel the first one (if it exists) 2. When freeing a buddy, only attempt to cancel a url request if it is non-NULL
-rw-r--r--libpurple/protocols/myspace/user.c9
-rw-r--r--libpurple/protocols/myspace/user.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/libpurple/protocols/myspace/user.c b/libpurple/protocols/myspace/user.c
index 3b9175818c..63577741ce 100644
--- a/libpurple/protocols/myspace/user.c
+++ b/libpurple/protocols/myspace/user.c
@@ -70,6 +70,9 @@ void msim_user_free(MsimUser *user)
if (!user)
return;
+ if (user->url_data != NULL)
+ purple_util_fetch_url_cancel(user->url_data);
+
g_free(user->client_info);
g_free(user->gender);
g_free(user->location);
@@ -212,6 +215,8 @@ msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data,
const char *name = purple_buddy_get_name(user->buddy);
PurpleAccount *account;
+ user->url_data = NULL;
+
purple_debug_info("msim_downloaded_buddy_icon",
"Downloaded %" G_GSIZE_FORMAT " bytes\n", len);
@@ -375,7 +380,9 @@ msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user
/* Only download if URL changed */
if (!previous_url || !g_str_equal(previous_url, user->image_url)) {
- purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user);
+ if (user->url_data != NULL)
+ purple_util_fetch_url_cancel(user->url_data);
+ user->url_data = purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user);
}
} else if (g_str_equal(key_str, "LastImageUpdated")) {
/* TODO: use somewhere */
diff --git a/libpurple/protocols/myspace/user.h b/libpurple/protocols/myspace/user.h
index d1a8b59970..acc0c2604d 100644
--- a/libpurple/protocols/myspace/user.h
+++ b/libpurple/protocols/myspace/user.h
@@ -40,6 +40,7 @@ typedef struct _MsimUser
gchar *image_url;
guint last_image_updated;
gboolean temporary_user;
+ PurpleUtilFetchUrlData *url_data;
} MsimUser;
/* Callback function pointer type for when a user's information is received,