diff --git a/src/Messages/TSMessagesManager.m b/src/Messages/TSMessagesManager.m index 3c6d2218..d6736e68 100644 --- a/src/Messages/TSMessagesManager.m +++ b/src/Messages/TSMessagesManager.m @@ -560,6 +560,10 @@ - (TSIncomingMessage *)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *) __block TSIncomingMessage *_Nullable incomingMessage; __block TSThread *thread; + // Do this outside of a transaction to avoid deadlock + OWSAssert([TSAccountManager isRegistered]); + NSString *localNumber = [TSAccountManager localNumber]; + [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { if (groupId) { NSMutableArray *uniqueMemberIds = [[[NSSet setWithArray:dataMessage.group.members] allObjects] mutableCopy]; @@ -634,8 +638,7 @@ - (TSIncomingMessage *)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *) // Any messages sent from the current user - from this device or another - should be // automatically marked as read. - OWSAssert([TSAccountManager isRegistered]); - BOOL shouldMarkMessageAsRead = [envelope.source isEqualToString:[TSAccountManager localNumber]]; + BOOL shouldMarkMessageAsRead = [envelope.source isEqualToString:localNumber]; if (shouldMarkMessageAsRead) { [incomingMessage markAsReadLocallyWithTransaction:transaction]; }