diff --git a/FileManager/AudibleFileStorage.cs b/FileManager/AudibleFileStorage.cs index 3456597b..362e1371 100644 --- a/FileManager/AudibleFileStorage.cs +++ b/FileManager/AudibleFileStorage.cs @@ -36,6 +36,7 @@ namespace FileManager } } + private static object bookDirectoryFilesLocker { get; } = new(); internal static BackgroundFileSystem BookDirectoryFiles { get; set; } #endregion @@ -66,7 +67,7 @@ namespace FileManager //If user changed the BooksDirectory, reinitialize. if (StorageDirectory != BookDirectoryFiles.RootDirectory) { - lock (BookDirectoryFiles) + lock (bookDirectoryFilesLocker) { if (StorageDirectory != BookDirectoryFiles.RootDirectory) { diff --git a/FileManager/BackgroundFileSystem.cs b/FileManager/BackgroundFileSystem.cs index f4a84167..0546ac07 100644 --- a/FileManager/BackgroundFileSystem.cs +++ b/FileManager/BackgroundFileSystem.cs @@ -25,6 +25,8 @@ namespace FileManager private FileSystemWatcher fileSystemWatcher { get; set; } private BlockingCollection directoryChangesEvents { get; set; } private Task backgroundScanner { get; set; } + + private object fsCacheLocker { get; } = new(); private List fsCache { get; } = new(); public BackgroundFileSystem(string rootDirectory, string searchPattern, SearchOption searchOptions) @@ -38,15 +40,13 @@ namespace FileManager public string FindFile(string regexPattern, RegexOptions options) { - lock (fsCache) - { + lock (fsCacheLocker) return fsCache.FirstOrDefault(s => Regex.IsMatch(s, regexPattern, options)); - } } public void RefreshFiles() { - lock (fsCache) + lock (fsCacheLocker) { fsCache.Clear(); fsCache.AddRange(Directory.EnumerateFiles(RootDirectory, SearchPattern, SearchOption)); @@ -57,7 +57,7 @@ namespace FileManager { Stop(); - lock (fsCache) + lock (fsCacheLocker) fsCache.AddRange(Directory.EnumerateFiles(RootDirectory, SearchPattern, SearchOption)); directoryChangesEvents = new BlockingCollection(); @@ -86,7 +86,7 @@ namespace FileManager //Dispose of directoryChangesEvents after backgroundScanner exists. directoryChangesEvents?.Dispose(); - lock (fsCache) + lock (fsCacheLocker) fsCache.Clear(); } @@ -106,7 +106,7 @@ namespace FileManager { while (directoryChangesEvents.TryTake(out FileSystemEventArgs change, -1)) { - lock (fsCache) + lock (fsCacheLocker) UpdateLocalCache(change); } } @@ -146,9 +146,7 @@ namespace FileManager private void AddUniqueFiles(IEnumerable newFiles) { foreach (var file in newFiles) - { AddUniqueFile(file); - } } private void AddUniqueFile(string newFile) { diff --git a/FileManager/PictureStorage.cs b/FileManager/PictureStorage.cs index 8c143dcf..2e75f7db 100644 --- a/FileManager/PictureStorage.cs +++ b/FileManager/PictureStorage.cs @@ -43,11 +43,12 @@ namespace FileManager public static event EventHandler PictureCached; private static BlockingCollection DownloadQueue { get; } = new BlockingCollection(); + private static object cacheLocker { get; } = new object(); private static Dictionary cache { get; } = new Dictionary(); private static Dictionary defaultImages { get; } = new Dictionary(); public static (bool isDefault, byte[] bytes) GetPicture(PictureDefinition def) { - lock (cache) + lock (cacheLocker) { if (cache.ContainsKey(def)) return (false, cache[def]); @@ -67,7 +68,7 @@ namespace FileManager public static byte[] GetPictureSynchronously(PictureDefinition def) { - lock (cache) + lock (cacheLocker) { if (!cache.ContainsKey(def) || cache[def] == null) { @@ -104,7 +105,7 @@ namespace FileManager var bytes = downloadBytes(def); saveFile(def, bytes); - lock (cache) + lock (cacheLocker) cache[def] = bytes; PictureCached?.Invoke(nameof(PictureStorage), new PictureCachedEventArgs { Definition = def, Picture = bytes });