From 3f2bee83832230d70bfbb98533f8d398cdce1845 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 11 Jan 2018 10:27:02 -0500 Subject: [PATCH] Respond to CR. --- SignalServiceKit/src/Devices/OWSDevice.m | 32 +++++++++++++++--------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/SignalServiceKit/src/Devices/OWSDevice.m b/SignalServiceKit/src/Devices/OWSDevice.m index 056018dbc..04dce30fe 100644 --- a/SignalServiceKit/src/Devices/OWSDevice.m +++ b/SignalServiceKit/src/Devices/OWSDevice.m @@ -19,7 +19,9 @@ NSString *const kTSStorageManager_MayHaveLinkedDevices = @"kTSStorageManager_May @interface OWSDeviceManager () +// This property should only be accessed while synchronized on self. @property (atomic, nullable) NSNumber *mayHaveLinkedDevicesCached; + @property (atomic) NSDate *lastReceivedSyncMessage; @end @@ -47,24 +49,30 @@ NSString *const kTSStorageManager_MayHaveLinkedDevices = @"kTSStorageManager_May { OWSAssert(dbConnection); - // We don't bother synchronizing around - if (!self.mayHaveLinkedDevicesCached) { - self.mayHaveLinkedDevicesCached = @([dbConnection boolForKey:kTSStorageManager_MayHaveLinkedDevices - inCollection:kTSStorageManager_OWSDeviceCollection - defaultValue:YES]); - } + @synchronized(self) + { + // We don't bother synchronizing around + if (!self.mayHaveLinkedDevicesCached) { + self.mayHaveLinkedDevicesCached = @([dbConnection boolForKey:kTSStorageManager_MayHaveLinkedDevices + inCollection:kTSStorageManager_OWSDeviceCollection + defaultValue:YES]); + } - return [self.mayHaveLinkedDevicesCached boolValue]; + return [self.mayHaveLinkedDevicesCached boolValue]; + } } - (void)setMayHaveLinkedDevices { - if (self.mayHaveLinkedDevicesCached != nil && self.mayHaveLinkedDevicesCached.boolValue) { - // Skip redundant writes. - return; - } + @synchronized(self) + { + if (self.mayHaveLinkedDevicesCached != nil && self.mayHaveLinkedDevicesCached.boolValue) { + // Skip redundant writes. + return; + } - self.mayHaveLinkedDevicesCached = @(YES); + self.mayHaveLinkedDevicesCached = @(YES); + } // Note that we write async to avoid opening transactions within transactions. [TSStorageManager.sharedManager.newDatabaseConnection