libpurple/protocols/msn/slplink.c

branch
cpw.qulogic.msnp16
changeset 30933
e8fb33bb8635
parent 30932
f7b1a60f7466
parent 30492
7d49d1421450
child 30935
b639ee326262
--- a/libpurple/protocols/msn/slplink.c	Wed Jun 02 20:08:53 2010 +0000
+++ b/libpurple/protocols/msn/slplink.c	Sat Jul 31 23:42:35 2010 +0000
@@ -214,11 +214,16 @@
 		slplink->swboard = NULL;
 	}
 
-	/* The slplink has no slpcalls in it, release it from the DC. */
-	if (slplink->slp_calls == NULL && slplink->dc != NULL) {
-		slplink->dc->slplink = NULL;
-		msn_dc_destroy(slplink->dc);
-		slplink->dc = NULL;
+	if (slplink->dc != NULL) {
+		if ((slplink->dc->state != DC_STATE_ESTABLISHED && slplink->dc->slpcall == slpcall)
+		 || (slplink->slp_calls == NULL)) {
+			/* The DC is not established and its corresponding slpcall is dead,
+			 * or the slplink has no slpcalls in it and no longer needs the DC.
+			 */
+			slplink->dc->slplink = NULL;
+			msn_dc_destroy(slplink->dc);
+			slplink->dc = NULL;
+		}
 	}
 }
 

mercurial