From 169e89774853612a367d7b58749a8baf0d45e5dd Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 8 Dec 2020 12:54:35 -0700 Subject: [PATCH] Add CriticalSection for file ops --- .../Presets/DevicePresets.cs | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs index ccce6ea7..84b3cbd3 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs @@ -15,6 +15,7 @@ namespace PepperDash.Essentials.Core.Presets /// public class DevicePresetsModel : Device { + private CCriticalSection _fileOps = new CCriticalSection(); private readonly bool _initSuccess; /// @@ -101,27 +102,35 @@ namespace PepperDash.Essentials.Core.Presets public void LoadChannels() { - PresetsAreLoaded = false; try { - var pl = JsonConvert.DeserializeObject(File.ReadToEnd(_filePath, Encoding.ASCII)); - Name = pl.Name; - PresetsList = pl.Channels; - } - catch (Exception e) - { - Debug.Console(2, this, - "LoadChannels: Error reading presets file. These presets will be empty:\r '{0}'\r Error:{1}", - _filePath, e.Message); - // Just save a default empty list - PresetsList = new List(); - } - PresetsAreLoaded = true; + _fileOps.Enter(); + PresetsAreLoaded = false; + try + { + var pl = JsonConvert.DeserializeObject(File.ReadToEnd(_filePath, Encoding.ASCII)); + Name = pl.Name; + PresetsList = pl.Channels; + } + catch (Exception e) + { + Debug.Console(2, this, + "LoadChannels: Error reading presets file. These presets will be empty:\r '{0}'\r Error:{1}", + _filePath, e.Message); + // Just save a default empty list + PresetsList = new List(); + } + PresetsAreLoaded = true; - var handler = PresetsLoaded; - if (handler != null) + var handler = PresetsLoaded; + if (handler != null) + { + handler(this, EventArgs.Empty); + } + } + finally { - handler(this, EventArgs.Empty); + _fileOps.Leave(); } } @@ -209,12 +218,21 @@ namespace PepperDash.Essentials.Core.Presets private void SavePresets() { - var json = JsonConvert.SerializeObject(PresetsList); - - using (var file = File.Open(_filePath, FileMode.Truncate)) + try { - file.Write(json, Encoding.UTF8); + _fileOps.Enter(); + var json = JsonConvert.SerializeObject(PresetsList); + + using (var file = File.Open(_filePath, FileMode.Truncate)) + { + file.Write(json, Encoding.UTF8); + } } + finally + { + _fileOps.Leave(); + } + } private void Pulse(Action act)