From 1c44a65f2c3e66d9472d8464cb033c7d1c716149 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Wed, 26 Feb 2020 09:58:36 +0700 Subject: [PATCH] Fix database handling issues --- SignalServiceKit/src/Loki/API/LokiAPI.swift | 2 +- SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift | 2 +- SignalServiceKit/src/Loki/API/LokiFileServerAPI.swift | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/LokiAPI.swift b/SignalServiceKit/src/Loki/API/LokiAPI.swift index 126eac01b..656a9fd65 100644 --- a/SignalServiceKit/src/Loki/API/LokiAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiAPI.swift @@ -142,7 +142,7 @@ public final class LokiAPI : NSObject { destinations.append(contentsOf: slaveDestinations) seal.fulfill(destinations) } - if let transaction = transaction { + if let transaction = transaction, transaction.connection.pendingTransactionCount != 0 { getDestinationsInternal(in: transaction) } else { storage.dbReadConnection.read { transaction in diff --git a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift index 3a021b5c4..5fc5b97b3 100644 --- a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift @@ -57,7 +57,7 @@ public class LokiDotNetAPI : NSObject { func setAuthTokenInternal(in transaction: YapDatabaseReadWriteTransaction) { transaction.setObject(newValue, forKey: server, inCollection: authTokenCollection) } - if let transaction = transaction { + if let transaction = transaction, transaction.connection.pendingTransactionCount != 0 { setAuthTokenInternal(in: transaction) } else { storage.dbReadWriteConnection.readWrite { transaction in diff --git a/SignalServiceKit/src/Loki/API/LokiFileServerAPI.swift b/SignalServiceKit/src/Loki/API/LokiFileServerAPI.swift index 586e10069..fb8a4e5dc 100644 --- a/SignalServiceKit/src/Loki/API/LokiFileServerAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiFileServerAPI.swift @@ -76,9 +76,16 @@ public final class LokiFileServerAPI : LokiDotNetAPI { } }) }.map(on: DispatchQueue.global()) { deviceLinks -> Set in - storage.dbReadWriteConnection.readWrite { transaction in + func setDeviceLinks(in transaction: YapDatabaseReadWriteTransaction) { storage.setDeviceLinks(deviceLinks, in: transaction) } + if let transaction = transaction, transaction.connection.pendingTransactionCount != 0 { + setDeviceLinks(in: transaction) + } else { + storage.dbReadWriteConnection.readWrite { transaction in + setDeviceLinks(in: transaction) + } + } return deviceLinks } }