On Mon, 2007-10-29 at 23:44 -0400, Havoc Pennington wrote: > Hi, > > On 10/29/07, Colin Walters <walters redhat com> wrote: > > See: https://bugzilla.redhat.com/show_bug.cgi?id=320981 > > http://lmacken.fedorapeople.org/mugshot-bugreport.txt > > > > We can delete all this pidgin code, right? > > Most of it is still used afaik. The only obsolete thing is exporting > the non-data-model API from hippo-dbus-im.c, but the crash doesn't > look related to that. > > It's kind of hard to diagnose from the backtrace, but apparently in > hippo-dbus-im.c:hippo_dbus_im_update_buddy() this line crashes? > > buddy = g_hash_table_lookup(im->buddies, buddy_id); > > It doesn't look like either of those args to the hash lookup could be > NULL, though, unless perhaps a return_if_fail(whatever, NULL) is > tripped someplace. OK, I ran into this problem overnight and happened to be running Mugshot in a debugger ... it's actually a different hash table lookup - it's in: if (g_hash_table_lookup(id->icon_requests, icon_hash) != NULL) return; /* we have a request pending already */ And the problem is that icon_hash is NULL. The existing buddy looks like: {resource_id = 0x9b567b0 "online-desktop:/o/pidgin/buddy/aim.m<...>", protocol = 0x9b568a8 "aim", name = 0x9b568c8 "m<....>", alias = 0x0, is_online = 1, status = 0x9b569e0 "Available", webdav_url = 0x0, icon_hash = 0x9bfb218 "c6435469345f5a1974d435837d4a2d249c57f69e", icon_data_url = 0x9cc3178 "data:image/jpg;base64,/9j/4AAQSkZJRg..."} So the problem in particular is the transition from icon_hash != NULL to icon_hash == NULL. I doubt it's actually someone removing their AIM avatar/photo; more likely there was a communication breakdown somewhere upstream of this code or a bug in the Pidgin code. Would: /* has_icon_hash() allows icon==NULL. It checks whether * the buddy we have stored has a matching hash, including * matching hash of NULL */ if (!hippo_dbus_im_has_icon_hash(resource_id, icon)) { + if (icon != NULL) + make_icon_request(id, icon, resource_id); - make_icon_request(id, icon, resource_id); } else { g_debug("It looks like we already have icon %s", icon ? icon : "(none)"); } Be a good short term fix? ... just leave the old icon in place until we get another notification. - Owen
Attachment:
signature.asc
Description: This is a digitally signed message part