Mercurial > pidgin.yaz
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); |