# HG changeset patch # User Evan Schoenberg # Date 1179412344 0 # Node ID 8ed7b2d32ad1380b3c29e6b088c5418c1a0af8a7 # Parent 0b7110b9e368afc508b0a5e3c5946b504ecfe88a slpcall now explicitlt references its xfer and unreferences it when it is destroyed. While it *looks* like this should *probably* have happened anyways due to the interactins between xfer_init, xfer_end, and xfer_cancel_remote, having the xfer's owner make this explicit makes the process less fragile and more obvious, and it may fix a crash as the slp is destroyed. Fixes #1070 diff -r 0b7110b9e368 -r 8ed7b2d32ad1 libpurple/protocols/msn/slp.c --- a/libpurple/protocols/msn/slp.c Thu May 17 14:30:48 2007 +0000 +++ b/libpurple/protocols/msn/slp.c Thu May 17 14:32:24 2007 +0000 @@ -363,6 +363,8 @@ purple_xfer_set_cancel_recv_fnc(xfer, msn_xfer_cancel); slpcall->xfer = xfer; + purple_xfer_ref(slpcall->xfer); + xfer->data = slpcall; purple_xfer_request(xfer); diff -r 0b7110b9e368 -r 8ed7b2d32ad1 libpurple/protocols/msn/slpcall.c --- a/libpurple/protocols/msn/slpcall.c Thu May 17 14:30:48 2007 +0000 +++ b/libpurple/protocols/msn/slpcall.c Thu May 17 14:32:24 2007 +0000 @@ -120,6 +120,9 @@ if (slpcall->end_cb != NULL) slpcall->end_cb(slpcall, session); + if (slpcall->xfer != NULL) + purple_xfer_unref(slpcall->xfer); + g_free(slpcall); } diff -r 0b7110b9e368 -r 8ed7b2d32ad1 libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Thu May 17 14:30:48 2007 +0000 +++ b/libpurple/protocols/msn/slplink.c Thu May 17 14:32:24 2007 +0000 @@ -763,6 +763,7 @@ slpcall->progress_cb = msn_xfer_progress_cb; slpcall->cb = msn_xfer_completed_cb; slpcall->xfer = xfer; + purple_xfer_ref(slpcall->xfer); slpcall->pending = TRUE;