From d470dac66bb2559a7452b6690d5736708df0e81c Mon Sep 17 00:00:00 2001 From: alex-osm Date: Sun, 19 Jan 2025 18:49:06 +0300 Subject: [PATCH] Fix OAImportBackupTask concurrency --- Sources/Backup/OAImportBackupTask.m | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Sources/Backup/OAImportBackupTask.m b/Sources/Backup/OAImportBackupTask.m index 0b7c346a6e..f5d88033a4 100644 --- a/Sources/Backup/OAImportBackupTask.m +++ b/Sources/Backup/OAImportBackupTask.m @@ -19,6 +19,7 @@ #import "OAImportBackupItemsTask.h" #import "OASettingsImporter.h" #import "OABackupInfo.h" +#import "OAConcurrentCollections.h" @implementation OAItemProgressInfo @@ -55,7 +56,7 @@ @implementation OAImportBackupTask NSArray *_remoteFiles; NSString *_key; - NSMutableDictionary *_itemsProgress; + OAConcurrentDictionary *_itemsProgress; } - (instancetype) initWithKey:(NSString *)key @@ -124,7 +125,7 @@ - (void) commonInit { _helper = OANetworkSettingsHelper.sharedInstance; _importer = [[OABackupImporter alloc] initWithListener:self]; - _itemsProgress = [NSMutableDictionary dictionary]; + _itemsProgress = [[OAConcurrentDictionary alloc] init]; _maxProgress = [self.class calculateMaxProgress]; } @@ -142,7 +143,7 @@ + (NSInteger) calculateMaxProgress - (OAItemProgressInfo *) getItemProgressInfo:(NSString *)type fileName:(NSString *)fileName { - return _itemsProgress[[type stringByAppendingString:fileName]]; + return [_itemsProgress objectForKeySync:[type stringByAppendingString:fileName]]; } - (void)main @@ -328,7 +329,7 @@ - (void) onProgressUpdate:(OAItemProgressInfo *)info if (prevInfo) info.work = prevInfo.work; - _itemsProgress[[info.type stringByAppendingString:info.fileName]] = info; + [_itemsProgress setObjectSync:info forKey:[info.type stringByAppendingString:info.fileName]]; if (info.finished) [_importListener onImportItemFinished:info.type fileName:info.fileName];