Mercurial > pidgin
changeset 30238:8c1a2ef5a713
Destroy a DC if its corresponding slpcall is going away and it hasn't
established itself yet. Otherwise, it might timeout later and try to
access the old slpcall.
Fixes #12072.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 03 Jul 2010 23:45:59 +0000 |
parents | a14c2e81fcf0 |
children | f55609d9bea5 |
files | libpurple/protocols/msn/slplink.c |
diffstat | 1 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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; + } } }