Fix thread-safety assert when sending video attachments.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent e7639bbdbe
commit 19aac08bec

@ -56,6 +56,7 @@
#import <SignalServiceKit/OWSFingerprintBuilder.h> #import <SignalServiceKit/OWSFingerprintBuilder.h>
#import <SignalServiceKit/OWSMessageSender.h> #import <SignalServiceKit/OWSMessageSender.h>
#import <SignalServiceKit/SignalRecipient.h> #import <SignalServiceKit/SignalRecipient.h>
#import <SignalServiceKit/Threading.h>
#import <SignalServiceKit/TSAccountManager.h> #import <SignalServiceKit/TSAccountManager.h>
#import <SignalServiceKit/TSInvalidIdentityKeySendingErrorMessage.h> #import <SignalServiceKit/TSInvalidIdentityKeySendingErrorMessage.h>
#import <SignalServiceKit/TSMessagesManager.h> #import <SignalServiceKit/TSMessagesManager.h>
@ -1965,6 +1966,7 @@ typedef enum : NSUInteger {
[self dismissViewControllerAnimated:YES [self dismissViewControllerAnimated:YES
completion:^{ completion:^{
OWSAssert([NSThread isMainThread]); OWSAssert([NSThread isMainThread]);
[self sendMessageAttachment:attachment]; [self sendMessageAttachment:attachment];
}]; }];
} }
@ -1974,41 +1976,42 @@ typedef enum : NSUInteger {
- (void)sendMessageAttachment:(SignalAttachment *)attachment - (void)sendMessageAttachment:(SignalAttachment *)attachment
{ {
OWSAssert([NSThread isMainThread]);
// TODO: Should we assume non-nil or should we check for non-nil? // TODO: Should we assume non-nil or should we check for non-nil?
OWSAssert(attachment != nil); OWSAssert(attachment != nil);
OWSAssert(![attachment hasError]); OWSAssert(![attachment hasError]);
OWSAssert([attachment mimeType].length > 0); OWSAssert([attachment mimeType].length > 0);
TSOutgoingMessage *message; DispatchMainThreadSafe(^{
OWSDisappearingMessagesConfiguration *configuration = TSOutgoingMessage *message;
OWSDisappearingMessagesConfiguration *configuration =
[OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]; [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId];
if (configuration.isEnabled) { if (configuration.isEnabled) {
message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp]
inThread:self.thread inThread:self.thread
messageBody:nil messageBody:nil
attachmentIds:[NSMutableArray new] attachmentIds:[NSMutableArray new]
expiresInSeconds:configuration.durationSeconds]; expiresInSeconds:configuration.durationSeconds];
} else { } else {
message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp]
inThread:self.thread inThread:self.thread
messageBody:nil messageBody:nil
attachmentIds:[NSMutableArray new]]; attachmentIds:[NSMutableArray new]];
} }
DDLogVerbose(@"Sending attachment. Size in bytes: %lu, contentType: %@", DDLogVerbose(@"Sending attachment. Size in bytes: %lu, contentType: %@",
(unsigned long)attachment.data.length, (unsigned long)attachment.data.length,
[attachment mimeType]); [attachment mimeType]);
[self.messageSender sendAttachmentData:attachment.data [self.messageSender sendAttachmentData:attachment.data
contentType:[attachment mimeType] contentType:[attachment mimeType]
inMessage:message inMessage:message
success:^{ success:^{
DDLogDebug(@"%@ Successfully sent message attachment.", self.tag); DDLogDebug(@"%@ Successfully sent message attachment.", self.tag);
} }
failure:^(NSError *error) { failure:^(NSError *error) {
DDLogError( DDLogError(
@"%@ Failed to send message attachment with error: %@", self.tag, error); @"%@ Failed to send message attachment with error: %@", self.tag, error);
}]; }];
});
} }
- (NSURL *)videoTempFolder { - (NSURL *)videoTempFolder {

Loading…
Cancel
Save