diff --git a/Core/XMPPStream.m b/Core/XMPPStream.m index 6d11695ade..a60dcd8b5c 100644 --- a/Core/XMPPStream.m +++ b/Core/XMPPStream.m @@ -523,17 +523,18 @@ - (XMPPPresence *)myPresence { if (dispatch_get_specific(xmppQueueTag)) { - return myPresence; + XMPPPresence *myPresenceCopy = [myPresence copy]; + return myPresenceCopy; } else { - __block XMPPPresence *result; + __block XMPPPresence *myPresenceCopy; dispatch_sync(xmppQueue, ^{ - result = self->myPresence; + myPresenceCopy = [self->myPresence copy]; }); - return result; + return myPresenceCopy; } } @@ -2455,14 +2456,16 @@ - (void)sendPresence:(XMPPPresence *)presence withTag:(long)tag }}); } - if (modifiedPresence) + __block XMPPPresence *modifiedPresenceCopy = [modifiedPresence copy]; + + if (modifiedPresenceCopy) { dispatch_async(self->xmppQueue, ^{ @autoreleasepool { if (self->state == STATE_XMPP_CONNECTED) { - [self continueSendPresence:modifiedPresence withTag:tag]; + [self continueSendPresence:modifiedPresenceCopy withTag:tag]; } else { - [self failToSendPresence:modifiedPresence]; + [self failToSendPresence:modifiedPresenceCopy]; } }}); }