From 52f52a94a26a13a5efaeb20913e4238d9dc1dbc2 Mon Sep 17 00:00:00 2001 From: Matthew Chen <matthew@signal.org> Date: Mon, 3 Dec 2018 22:18:09 -0500 Subject: [PATCH] Respond to CR. --- .../util/Backup/OWSBackupLazyRestore.swift | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Signal/src/util/Backup/OWSBackupLazyRestore.swift b/Signal/src/util/Backup/OWSBackupLazyRestore.swift index e58a2eb02..563c266cb 100644 --- a/Signal/src/util/Backup/OWSBackupLazyRestore.swift +++ b/Signal/src/util/Backup/OWSBackupLazyRestore.swift @@ -51,9 +51,7 @@ public class BackupLazyRestore: NSObject { // MARK: - - private var backgroundQueue = { - DispatchQueue.global(qos: .background) - }() + private let backgroundQueue = DispatchQueue.global(qos: .background) @objc public func runIfNecessary() { @@ -100,13 +98,12 @@ public class BackupLazyRestore: NSObject { private func tryToRestoreNextAttachment(attachmentIds: [String], errorCount: UInt, backupIO: OWSBackupIO) { var attachmentIdsCopy = attachmentIds - guard let attachmentId = attachmentIdsCopy.last else { + guard let attachmentId = attachmentIdsCopy.popLast() else { // This job is done. Logger.verbose("job is done.") complete(errorCount: errorCount) return } - attachmentIdsCopy.removeLast() guard let attachmentPointer = TSAttachment.fetch(uniqueId: attachmentId) as? TSAttachmentPointer else { Logger.warn("could not load attachment.") // Not necessarily an error. @@ -117,21 +114,17 @@ public class BackupLazyRestore: NSObject { } backup.lazyRestoreAttachment(attachmentPointer, backupIO: backupIO) - .done { _ in + .done(on: self.backgroundQueue) { _ in Logger.info("Restored attachment.") - self.backgroundQueue.async { - // Continue trying to restore the other attachments. - self.tryToRestoreNextAttachment(attachmentIds: attachmentIdsCopy, errorCount: errorCount, backupIO: backupIO) - } - }.catch { (error) in + // Continue trying to restore the other attachments. + self.tryToRestoreNextAttachment(attachmentIds: attachmentIdsCopy, errorCount: errorCount, backupIO: backupIO) + }.catch(on: self.backgroundQueue) { (error) in Logger.error("Could not restore attachment: \(error)") - self.backgroundQueue.async { - // Continue trying to restore the other attachments. - self.tryToRestoreNextAttachment(attachmentIds: attachmentIdsCopy, errorCount: errorCount + 1, backupIO: backupIO) - } - } + // Continue trying to restore the other attachments. + self.tryToRestoreNextAttachment(attachmentIds: attachmentIdsCopy, errorCount: errorCount + 1, backupIO: backupIO) + }.retainUntilComplete() } private func complete(errorCount: UInt) {