Rework flush of registration connection(s).

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

@ -138,14 +138,19 @@ 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.
[[self registrationConnection]
flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
completionBlock:^{
// Block until all async registrations are complete. // Block until all async registrations are complete.
// //
// NOTE: This has to happen on the "registration connections" for this // NOTE: This has to happen on the "registration connections" for this
// database. // database.
NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet = NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet = [
[[((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy]; [((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy];
DDLogVerbose(@"%@ flushing registration connections: %zd.", self.logTag, pendingRegistrationConnectionSet.count); DDLogVerbose(@"%@ flushing registration connections: %zd.",
self.logTag,
pendingRegistrationConnectionSet.count);
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
if (pendingRegistrationConnectionSet.count > 0) { if (pendingRegistrationConnectionSet.count > 0) {
@ -155,13 +160,19 @@ void runAsyncRegistrationsForStorage(OWSStorage *storage)
completionBlock:^{ completionBlock:^{
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
[pendingRegistrationConnectionSet removeObject:dbConnection]; [pendingRegistrationConnectionSet
if (pendingRegistrationConnectionSet.count > 0) { removeObject:dbConnection];
DDLogVerbose(@"%@ registration connection flushed.", self.logTag); if (pendingRegistrationConnectionSet.count
> 0) {
DDLogVerbose(@"%@ registration "
@"connection flushed.",
self.logTag);
return; return;
} }
[self markAsyncRegistrationsAsCompleteWithCompletion:completion]; [self
markAsyncRegistrationsAsCompleteWithCompletion:
completion];
}]; }];
} }
} else { } else {

Loading…
Cancel
Save