comparison libpurple/protocols/myspace/user.c @ 29249:a7f5aa182400

*** 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
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 07 Jan 2010 23:47:00 +0000
parents f541583e31bd
children
comparison
equal deleted inserted replaced
29248:1182e604439c 29249:a7f5aa182400
67 67
68 void msim_user_free(MsimUser *user) 68 void msim_user_free(MsimUser *user)
69 { 69 {
70 if (!user) 70 if (!user)
71 return; 71 return;
72
73 if (user->url_data != NULL)
74 purple_util_fetch_url_cancel(user->url_data);
72 75
73 g_free(user->client_info); 76 g_free(user->client_info);
74 g_free(user->gender); 77 g_free(user->gender);
75 g_free(user->location); 78 g_free(user->location);
76 g_free(user->headline); 79 g_free(user->headline);
209 const gchar *error_message) 212 const gchar *error_message)
210 { 213 {
211 MsimUser *user = (MsimUser *)user_data; 214 MsimUser *user = (MsimUser *)user_data;
212 const char *name = purple_buddy_get_name(user->buddy); 215 const char *name = purple_buddy_get_name(user->buddy);
213 PurpleAccount *account; 216 PurpleAccount *account;
217
218 user->url_data = NULL;
214 219
215 purple_debug_info("msim_downloaded_buddy_icon", 220 purple_debug_info("msim_downloaded_buddy_icon",
216 "Downloaded %" G_GSIZE_FORMAT " bytes\n", len); 221 "Downloaded %" G_GSIZE_FORMAT " bytes\n", len);
217 222
218 if (!url_text) { 223 if (!url_text) {
373 /* TODO: use ETag for checksum */ 378 /* TODO: use ETag for checksum */
374 previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy); 379 previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy);
375 380
376 /* Only download if URL changed */ 381 /* Only download if URL changed */
377 if (!previous_url || !g_str_equal(previous_url, user->image_url)) { 382 if (!previous_url || !g_str_equal(previous_url, user->image_url)) {
378 purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user); 383 if (user->url_data != NULL)
384 purple_util_fetch_url_cancel(user->url_data);
385 user->url_data = purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user);
379 } 386 }
380 } else if (g_str_equal(key_str, "LastImageUpdated")) { 387 } else if (g_str_equal(key_str, "LastImageUpdated")) {
381 /* TODO: use somewhere */ 388 /* TODO: use somewhere */
382 user->last_image_updated = atol(value_str); 389 user->last_image_updated = atol(value_str);
383 g_free(value_str); 390 g_free(value_str);