From 04551d7f670c92718a770e39e22d8b029912478b Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 4 Sep 2015 14:24:42 +0200 Subject: [PATCH] FileTransfer: fix crash when cancelling file transfer --- Classes/Utils/FileTransferDelegate.m | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Classes/Utils/FileTransferDelegate.m b/Classes/Utils/FileTransferDelegate.m index 5775125ac..28b74008d 100644 --- a/Classes/Utils/FileTransferDelegate.m +++ b/Classes/Utils/FileTransferDelegate.m @@ -188,13 +188,17 @@ static LinphoneBuffer *linphone_iphone_file_transfer_send(LinphoneChatMessage *m - (void)stopAndDestroy { [[[LinphoneManager instance] fileTransferDelegates] removeObject:self]; if (_message != NULL) { - LOGI(@"%p Cancelling transfer from %p", self, _message); - linphone_chat_message_cbs_set_file_transfer_send(linphone_chat_message_get_callbacks(_message), NULL); - linphone_chat_message_cbs_set_file_transfer_recv(linphone_chat_message_get_callbacks(_message), NULL); - linphone_chat_message_cancel_file_transfer(_message); - linphone_chat_message_unref(_message); + LinphoneChatMessage *msg = _message; + _message = NULL; + LOGI(@"%p Cancelling transfer from %p", self, msg); + linphone_chat_message_cbs_set_file_transfer_send(linphone_chat_message_get_callbacks(msg), NULL); + linphone_chat_message_cbs_set_file_transfer_recv(linphone_chat_message_get_callbacks(msg), NULL); + // when we cancel file transfer, this will automatically trigger NotDelivered callback... recalling ourself a + // second time + // so we have to unset message BEFORE calling this + linphone_chat_message_cancel_file_transfer(msg); + linphone_chat_message_unref(msg); } - _message = NULL; _data = nil; LOGI(@"%p Destroying", self); }