libpurple/protocols/msn/switchboard.c

changeset 30066
25742b976ce2
parent 29138
9e89f5ee9268
child 30081
a0f194e8dbb9
--- a/libpurple/protocols/msn/switchboard.c	Tue Mar 16 06:20:05 2010 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Wed Mar 17 03:45:07 2010 +0000
@@ -87,8 +87,17 @@
 		purple_timeout_remove(swboard->reconn_timeout_h);
 
 	/* If it linked us is because its looking for trouble */
-	while (swboard->slplinks != NULL)
-		msn_slplink_destroy(swboard->slplinks->data);
+	while (swboard->slplinks != NULL) {
+		/* Destroy only those slplinks which use the switchboard */
+		MsnSlpLink	*slplink = swboard->slplinks->data;
+
+		if (slplink->dc == NULL)
+			msn_slplink_destroy(slplink);
+		else {
+			swboard->slplinks = g_list_remove(swboard->slplinks, slplink);
+			slplink->swboard = NULL;
+		}
+	}
 
 	/* Destroy the message queue */
 	while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL)

mercurial