From 19aac08bec3f70b0546aaf1b522485ebbef3e5ba Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 14 Mar 2017 23:04:02 -0300 Subject: [PATCH] Fix thread-safety assert when sending video attachments. // FREEBIE --- .../view controllers/MessagesViewController.m | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/Signal/src/view controllers/MessagesViewController.m b/Signal/src/view controllers/MessagesViewController.m index 5cc451fbb..52f8ff5a8 100644 --- a/Signal/src/view controllers/MessagesViewController.m +++ b/Signal/src/view controllers/MessagesViewController.m @@ -56,6 +56,7 @@ #import #import #import +#import #import #import #import @@ -1965,6 +1966,7 @@ typedef enum : NSUInteger { [self dismissViewControllerAnimated:YES completion:^{ OWSAssert([NSThread isMainThread]); + [self sendMessageAttachment:attachment]; }]; } @@ -1974,41 +1976,42 @@ typedef enum : NSUInteger { - (void)sendMessageAttachment:(SignalAttachment *)attachment { - OWSAssert([NSThread isMainThread]); // TODO: Should we assume non-nil or should we check for non-nil? OWSAssert(attachment != nil); OWSAssert(![attachment hasError]); OWSAssert([attachment mimeType].length > 0); - TSOutgoingMessage *message; - OWSDisappearingMessagesConfiguration *configuration = + DispatchMainThreadSafe(^{ + TSOutgoingMessage *message; + OWSDisappearingMessagesConfiguration *configuration = [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]; - if (configuration.isEnabled) { - message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] - inThread:self.thread - messageBody:nil - attachmentIds:[NSMutableArray new] - expiresInSeconds:configuration.durationSeconds]; - } else { - message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] - inThread:self.thread - messageBody:nil - attachmentIds:[NSMutableArray new]]; - } - - DDLogVerbose(@"Sending attachment. Size in bytes: %lu, contentType: %@", - (unsigned long)attachment.data.length, - [attachment mimeType]); - [self.messageSender sendAttachmentData:attachment.data - contentType:[attachment mimeType] - inMessage:message - success:^{ - DDLogDebug(@"%@ Successfully sent message attachment.", self.tag); - } - failure:^(NSError *error) { - DDLogError( - @"%@ Failed to send message attachment with error: %@", self.tag, error); - }]; + if (configuration.isEnabled) { + message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] + inThread:self.thread + messageBody:nil + attachmentIds:[NSMutableArray new] + expiresInSeconds:configuration.durationSeconds]; + } else { + message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] + inThread:self.thread + messageBody:nil + attachmentIds:[NSMutableArray new]]; + } + + DDLogVerbose(@"Sending attachment. Size in bytes: %lu, contentType: %@", + (unsigned long)attachment.data.length, + [attachment mimeType]); + [self.messageSender sendAttachmentData:attachment.data + contentType:[attachment mimeType] + inMessage:message + success:^{ + DDLogDebug(@"%@ Successfully sent message attachment.", self.tag); + } + failure:^(NSError *error) { + DDLogError( + @"%@ Failed to send message attachment with error: %@", self.tag, error); + }]; + }); } - (NSURL *)videoTempFolder {