Rework flush of registration connection(s).

pull/1/head
Matthew Chen 7 years ago
parent 4f1f1a107f
commit 5d627ee89f

@ -138,37 +138,48 @@ void runAsyncRegistrationsForStorage(OWSStorage *storage)
DDLogVerbose(@"%@ async registrations enqueued.", self.logTag); DDLogVerbose(@"%@ async registrations enqueued.", self.logTag);
[[self registrationConnection] asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { // Flush the write queue to ensure all async registrations have begun.
// Block until all async registrations are complete. [[self registrationConnection]
// flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
// NOTE: This has to happen on the "registration connections" for this completionBlock:^{
// database. // Block until all async registrations are complete.
NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet = //
[[((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy]; // NOTE: This has to happen on the "registration connections" for this
DDLogVerbose(@"%@ flushing registration connections: %zd.", self.logTag, pendingRegistrationConnectionSet.count); // database.
NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet = [
dispatch_async(dispatch_get_main_queue(), ^{ [((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy];
if (pendingRegistrationConnectionSet.count > 0) { DDLogVerbose(@"%@ flushing registration connections: %zd.",
for (YapDatabaseConnection *dbConnection in pendingRegistrationConnectionSet) { self.logTag,
[dbConnection pendingRegistrationConnectionSet.count);
flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
completionBlock:^{ dispatch_async(dispatch_get_main_queue(), ^{
OWSAssertIsOnMainThread(); if (pendingRegistrationConnectionSet.count > 0) {
for (YapDatabaseConnection *dbConnection in pendingRegistrationConnectionSet) {
[pendingRegistrationConnectionSet removeObject:dbConnection]; [dbConnection
if (pendingRegistrationConnectionSet.count > 0) { flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
DDLogVerbose(@"%@ registration connection flushed.", self.logTag); completionBlock:^{
return; OWSAssertIsOnMainThread();
}
[pendingRegistrationConnectionSet
[self markAsyncRegistrationsAsCompleteWithCompletion:completion]; removeObject:dbConnection];
}]; if (pendingRegistrationConnectionSet.count
} > 0) {
} else { DDLogVerbose(@"%@ registration "
[self markAsyncRegistrationsAsCompleteWithCompletion:completion]; @"connection flushed.",
} self.logTag);
}); return;
}]; }
[self
markAsyncRegistrationsAsCompleteWithCompletion:
completion];
}];
}
} else {
[self markAsyncRegistrationsAsCompleteWithCompletion:completion];
}
});
}];
} }
- (void)markAsyncRegistrationsAsCompleteWithCompletion:(void (^_Nonnull)(void))completion - (void)markAsyncRegistrationsAsCompleteWithCompletion:(void (^_Nonnull)(void))completion

Loading…
Cancel
Save