diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index dfae02350..cc963404d 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -4904,11 +4904,9 @@ typedef enum : NSUInteger { }]; // Flag to ensure that we only increment once per launch. - static BOOL hasIncrementedDatabaseView = NO; - if (hasError && !hasIncrementedDatabaseView) { + if (hasError) { OWSLogWarn(@"incrementing version of: %@", TSMessageDatabaseViewExtensionName); [OWSPrimaryStorage incrementVersionOfDatabaseExtension:TSMessageDatabaseViewExtensionName]; - hasIncrementedDatabaseView = YES; } // Update the "break" properties (shouldShowDate and unreadIndicator) of the view items. diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.m b/Signal/src/ViewControllers/HomeView/HomeViewController.m index cadb5dcb2..b51368349 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.m @@ -880,11 +880,9 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations withMappings:self.threadMappings]; }]; - static BOOL hasIncrementedDatabaseView = NO; - if (![thread isKindOfClass:[TSThread class]] && !hasIncrementedDatabaseView) { + if (![thread isKindOfClass:[TSThread class]]) { OWSLogError(@"Invalid object in thread view: %@", [thread class]); [OWSStorage incrementVersionOfDatabaseExtension:TSThreadDatabaseViewExtensionName]; - hasIncrementedDatabaseView = YES; } return thread; diff --git a/SignalServiceKit/src/Storage/OWSStorage.m b/SignalServiceKit/src/Storage/OWSStorage.m index 887fd2e33..1530dd0ef 100644 --- a/SignalServiceKit/src/Storage/OWSStorage.m +++ b/SignalServiceKit/src/Storage/OWSStorage.m @@ -515,6 +515,20 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_ { OWSLogError(@"%@", extensionName); + // Don't increment version of a given extension more than once + // per launch. + static NSMutableSet *incrementedViewSet = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + incrementedViewSet = [NSMutableSet new]; + }); + @synchronized(incrementedViewSet) { + if ([incrementedViewSet containsObject:extensionName]) { + OWSLogInfo(@"Ignoring redundant increment: %@", extensionName); + } + [incrementedViewSet addObject:extensionName]; + } + NSUserDefaults *appUserDefaults = [NSUserDefaults appUserDefaults]; OWSAssertDebug(appUserDefaults); NSMutableDictionary *_Nullable versionMap =