libpurple/protocols/msn/slplink.c

changeset 30492
7d49d1421450
parent 30382
6eb81c3503c5
child 30708
535bec1e66fb
child 30933
e8fb33bb8635
child 31056
c6787549eb7d
--- a/libpurple/protocols/msn/slplink.c	Fri Jul 02 00:32:20 2010 +0000
+++ b/libpurple/protocols/msn/slplink.c	Sat Jul 03 23:45:59 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