From 8b201f594eee3736d0ee192c011db2b4c02546ff Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 14 Feb 2020 13:21:26 +1100 Subject: [PATCH] Fix occasional hang on startup --- SignalServiceKit/src/Contacts/TSThread.h | 2 ++ SignalServiceKit/src/Contacts/TSThread.m | 9 +++++++-- SignalServiceKit/src/Messages/OWSMessageManager.m | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index 11f80b45e..2afe7c567 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -216,6 +216,8 @@ typedef NS_ENUM(NSInteger, LKThreadFriendRequestStatus) { */ - (void)removeOldIncomingFriendRequestMessagesIfNeededWithTransaction:(YapDatabaseReadWriteTransaction *)transaction; +- (TSInteraction *)getLastInteractionWithTransaction:(YapDatabaseReadTransaction *)transaction; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index e7520d8b3..b8b61ef42 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -292,12 +292,17 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa { __block TSInteraction *interaction; [self.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { - YapDatabaseViewTransaction *interactions = [transaction ext:TSMessageDatabaseViewExtensionName]; - interaction = [interactions lastObjectInGroup:self.uniqueId]; + interaction = [self getLastInteractionWithTransaction:transaction]; }]; return interaction; } +- (TSInteraction *)getLastInteractionWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + YapDatabaseViewTransaction *interactions = [transaction ext:TSMessageDatabaseViewExtensionName]; + return [interactions lastObjectInGroup:self.uniqueId]; +} + /** * Useful for tests and debugging. In production use an enumeration method. */ diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index d5dfb14dc..06ac6d215 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1789,7 +1789,7 @@ NS_ASSUME_NONNULL_BEGIN if (thread.friendRequestStatus == LKThreadFriendRequestStatusNone) { return; } // Become happy friends and go on great adventures [thread saveFriendRequestStatus:LKThreadFriendRequestStatusFriends withTransaction:transaction]; - TSOutgoingMessage *existingFriendRequestMessage = [thread.lastInteraction as:TSOutgoingMessage.class]; + TSOutgoingMessage *existingFriendRequestMessage = [[thread getLastInteractionWithTransaction:transaction] as:TSOutgoingMessage.class]; if (existingFriendRequestMessage != nil && existingFriendRequestMessage.isFriendRequest) { [existingFriendRequestMessage saveFriendRequestStatus:LKMessageFriendRequestStatusAccepted withTransaction:transaction]; }