mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Rework flush of registration connection(s).
This commit is contained in:
parent
4f1f1a107f
commit
5d627ee89f
|
@ -138,37 +138,48 @@ void runAsyncRegistrationsForStorage(OWSStorage *storage)
|
|||
|
||||
DDLogVerbose(@"%@ async registrations enqueued.", self.logTag);
|
||||
|
||||
[[self registrationConnection] asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
// Block until all async registrations are complete.
|
||||
//
|
||||
// NOTE: This has to happen on the "registration connections" for this
|
||||
// database.
|
||||
NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet =
|
||||
[[((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy];
|
||||
DDLogVerbose(@"%@ flushing registration connections: %zd.", self.logTag, pendingRegistrationConnectionSet.count);
|
||||
// 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.
|
||||
//
|
||||
// NOTE: This has to happen on the "registration connections" for this
|
||||
// database.
|
||||
NSMutableSet<YapDatabaseConnection *> *pendingRegistrationConnectionSet = [
|
||||
[((OWSDatabase *)self.database)clearCollectedRegistrationConnections] mutableCopy];
|
||||
DDLogVerbose(@"%@ flushing registration connections: %zd.",
|
||||
self.logTag,
|
||||
pendingRegistrationConnectionSet.count);
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (pendingRegistrationConnectionSet.count > 0) {
|
||||
for (YapDatabaseConnection *dbConnection in pendingRegistrationConnectionSet) {
|
||||
[dbConnection
|
||||
flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
|
||||
completionBlock:^{
|
||||
OWSAssertIsOnMainThread();
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (pendingRegistrationConnectionSet.count > 0) {
|
||||
for (YapDatabaseConnection *dbConnection in pendingRegistrationConnectionSet) {
|
||||
[dbConnection
|
||||
flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
|
||||
completionBlock:^{
|
||||
OWSAssertIsOnMainThread();
|
||||
|
||||
[pendingRegistrationConnectionSet removeObject:dbConnection];
|
||||
if (pendingRegistrationConnectionSet.count > 0) {
|
||||
DDLogVerbose(@"%@ registration connection flushed.", self.logTag);
|
||||
return;
|
||||
}
|
||||
[pendingRegistrationConnectionSet
|
||||
removeObject:dbConnection];
|
||||
if (pendingRegistrationConnectionSet.count
|
||||
> 0) {
|
||||
DDLogVerbose(@"%@ registration "
|
||||
@"connection flushed.",
|
||||
self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
[self markAsyncRegistrationsAsCompleteWithCompletion:completion];
|
||||
}];
|
||||
}
|
||||
} else {
|
||||
[self markAsyncRegistrationsAsCompleteWithCompletion:completion];
|
||||
}
|
||||
});
|
||||
}];
|
||||
[self
|
||||
markAsyncRegistrationsAsCompleteWithCompletion:
|
||||
completion];
|
||||
}];
|
||||
}
|
||||
} else {
|
||||
[self markAsyncRegistrationsAsCompleteWithCompletion:completion];
|
||||
}
|
||||
});
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)markAsyncRegistrationsAsCompleteWithCompletion:(void (^_Nonnull)(void))completion
|
||||
|
|
Loading…
Reference in a new issue