Mercurial > pidgin
changeset 23662:7b2fdeb078cd
take an extra reference to PurpleXfer so we can check whether the whole
thing went away. I haven't tested this because it's late, but it shouldn't
break things or at least shouldn't make things worse.
It would be great if someone can test this and let me know.
References #6246
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Thu, 07 Aug 2008 07:07:32 +0000 |
parents | 4de9cd2a4af2 |
children | 7e2e4d3abd59 |
files | libpurple/protocols/msn/slpcall.c libpurple/protocols/msn/slpcall.h libpurple/protocols/msn/slplink.c |
diffstat | 3 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/msn/slpcall.c Thu Aug 07 06:16:57 2008 +0000 +++ b/libpurple/protocols/msn/slpcall.c Thu Aug 07 07:07:32 2008 +0000 @@ -97,8 +97,10 @@ if (slpcall->end_cb != NULL) slpcall->end_cb(slpcall, session); - if (slpcall->xfer != NULL) + if (slpcall->xfer != NULL) { + slpcall->xfer->data = NULL; purple_xfer_unref(slpcall->xfer); + } g_free(slpcall); }
--- a/libpurple/protocols/msn/slpcall.h Thu Aug 07 06:16:57 2008 +0000 +++ b/libpurple/protocols/msn/slpcall.h Thu Aug 07 07:07:32 2008 +0000 @@ -25,6 +25,7 @@ #define _MSN_SLPCALL_H_ #include "internal.h" +#include "ft.h" typedef struct _MsnSlpCall MsnSlpCall; @@ -70,7 +71,7 @@ /* Can be checksum, or smile */ char *data_info; - void *xfer; + PurpleXfer *xfer; MsnSlpCb cb; void (*end_cb)(MsnSlpCall *slpcall, MsnSession *session);
--- a/libpurple/protocols/msn/slplink.c Thu Aug 07 06:16:57 2008 +0000 +++ b/libpurple/protocols/msn/slplink.c Thu Aug 07 07:07:32 2008 +0000 @@ -536,10 +536,17 @@ if (xfer != NULL) { - purple_xfer_start(slpmsg->slpcall->xfer, - 0, NULL, 0); - slpmsg->fp = ((PurpleXfer *)slpmsg->slpcall->xfer)->dest_fp; - xfer->dest_fp = NULL; /* Disable double fclose() */ + purple_xfer_ref(xfer); + purple_xfer_start(xfer, 0, NULL, 0); + + if (xfer->data == NULL) { + purple_xfer_unref(xfer); + return; + } else { + purple_xfer_unref(xfer); + slpmsg->fp = xfer->dest_fp; + xfer->dest_fp = NULL; /* Disable double fclose() */ + } } } }