pidgin: 2d10538e: Attempt to avoid a crash in MSN. See th...

markdoliner at markdoliner at
Thu Nov 13 16:00:33 EST 2008

Revision: 2d10538e47e4d45e8c292b021893ed045ce266f0
Ancestor: df1ae446de2d28a2fd1c62bbcd6c2cba03a11732
Author: markdoliner at
Date: 2008-11-13T20:59:40
Branch: im.pidgin.pidgin

Modified files:


Attempt to avoid a crash in MSN.  See the comment in the code.
Our MSN custom emoticon code is crashy, by the way.  Basically I
think the slp/slplink/slpcall/switchboard code is buggy.  I think
there are a lot of cross-references and they don't all clean up
after themselves correctly.  But I don't understand this code
well enough to improve it.

-------------- next part --------------
--- libpurple/protocols/msn/slp.c	655e7fb5c5804adc6c46050abce82988489c0f5b
+++ libpurple/protocols/msn/slp.c	18d0dbc09dc3b63c5ecbd6a534d621b24663c527
@@ -847,7 +847,17 @@ msn_emoticon_msg(MsnCmdProc *cmdproc, Ms
 		sha1 = msn_object_get_sha1(obj);
 		slplink = msn_session_get_slplink(session, who);
-		slplink->swboard = swboard;
+		if (slplink->swboard != swboard) {
+			if (slplink->swboard != NULL)
+				/*
+				 * Apparently we're using a different switchboard now or
+				 * something?  I don't know if this is normal, but it
+				 * definitely happens.  So make sure the old switchboard
+				 * doesn't still have a reference to us.
+				 */
+				slplink->swboard->slplinks = g_list_remove(slplink->swboard->slplinks, slplink);
+			slplink->swboard = swboard;
+		}
 		/* If the conversation doesn't exist then this is a custom smiley
 		 * used in the first message in a MSN conversation: we need to create

More information about the Commits mailing list