From d289bbea940028954cd2f17dae2cb9287eba5afc Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 21 May 2019 17:59:33 -0500 Subject: [PATCH] Fix crashing bug caused by nesting update statements. --- Frameworks/ArticlesDatabase/ArticlesTable.swift | 11 +++++++---- Frameworks/ArticlesDatabase/StatusesTable.swift | 7 +++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Frameworks/ArticlesDatabase/ArticlesTable.swift b/Frameworks/ArticlesDatabase/ArticlesTable.swift index 05f1a2794..6379e3f7d 100644 --- a/Frameworks/ArticlesDatabase/ArticlesTable.swift +++ b/Frameworks/ArticlesDatabase/ArticlesTable.swift @@ -187,10 +187,10 @@ final class ArticlesTable: DatabaseTable { func ensureStatuses(_ articleIDs: Set, _ statusKey: ArticleStatus.Key, _ flag: Bool) { - self.queue.update { (database) in + self.queue.updateSync { (database) in let statusesDictionary = self.statusesTable.ensureStatusesForArticleIDs(articleIDs, false, database) let statuses = Set(statusesDictionary.values) - _ = self.statusesTable.mark(statuses, statusKey, flag) + _ = self.statusesTable.mark(statuses, statusKey, flag, database) } } @@ -312,8 +312,11 @@ final class ArticlesTable: DatabaseTable { } func mark(_ articles: Set
, _ statusKey: ArticleStatus.Key, _ flag: Bool) -> Set? { - - return statusesTable.mark(articles.statuses(), statusKey, flag) + var statuses: Set? + self.queue.updateSync { (database) in + statuses = self.statusesTable.mark(articles.statuses(), statusKey, flag, database) + } + return statuses } // MARK: Indexing diff --git a/Frameworks/ArticlesDatabase/StatusesTable.swift b/Frameworks/ArticlesDatabase/StatusesTable.swift index e44ef536a..55899cfb5 100644 --- a/Frameworks/ArticlesDatabase/StatusesTable.swift +++ b/Frameworks/ArticlesDatabase/StatusesTable.swift @@ -50,7 +50,7 @@ final class StatusesTable: DatabaseTable { // MARK: Marking - func mark(_ statuses: Set, _ statusKey: ArticleStatus.Key, _ flag: Bool) -> Set? { + func mark(_ statuses: Set, _ statusKey: ArticleStatus.Key, _ flag: Bool, _ database: FMDatabase) -> Set? { // Sets flag in both memory and in database. @@ -70,9 +70,8 @@ final class StatusesTable: DatabaseTable { } let articleIDs = updatedStatuses.articleIDs() - queue.updateSync { (database) in - self.markArticleIDs(articleIDs, statusKey, flag, database) - } + self.markArticleIDs(articleIDs, statusKey, flag, database) + return updatedStatuses }