From 98c26d0a7ca5c8cdaaef271a7e81b60776ee11bf Mon Sep 17 00:00:00 2001 From: John Lewin Date: Tue, 30 Aug 2016 10:41:38 -0700 Subject: [PATCH] Add locking around file save operations --- SlicerConfiguration/Settings/PrinterSettings.cs | 7 ++++++- SlicerConfiguration/Settings/ProfileManager.cs | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/SlicerConfiguration/Settings/PrinterSettings.cs b/SlicerConfiguration/Settings/PrinterSettings.cs index d9d4a8a6e..43dd9f238 100644 --- a/SlicerConfiguration/Settings/PrinterSettings.cs +++ b/SlicerConfiguration/Settings/PrinterSettings.cs @@ -66,6 +66,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public static Func ShouldShowAuthPanel { get; set; } + private static object writeLock = new object(); + [JsonIgnore] internal PrinterSettingsLayer QualityLayer { get; private set; } @@ -204,7 +206,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - File.WriteAllText(DocumentPath, json); + lock (writeLock) + { + File.WriteAllText(DocumentPath, json); + } if (ActiveSliceSettings.Instance.ID == this.ID) { diff --git a/SlicerConfiguration/Settings/ProfileManager.cs b/SlicerConfiguration/Settings/ProfileManager.cs index 166b2c8cf..e1b53f50a 100644 --- a/SlicerConfiguration/Settings/ProfileManager.cs +++ b/SlicerConfiguration/Settings/ProfileManager.cs @@ -53,6 +53,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public const string ProfileExtension = ".printer"; + private static object writeLock = new object(); private static EventHandler unregisterEvents; private static readonly string userDataPath = ApplicationDataStorage.ApplicationUserDataPath; private static string ProfilesPath @@ -80,7 +81,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { get { - string username = UserSettings.Instance.get("ActiveUserName"); if (string.IsNullOrEmpty(username)) @@ -100,7 +100,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } return username; } - } static ProfileManager() @@ -524,7 +523,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public void Save() { - File.WriteAllText(ProfilesDBPath, JsonConvert.SerializeObject(this, Formatting.Indented)); + lock(writeLock) + { + File.WriteAllText(ProfilesDBPath, JsonConvert.SerializeObject(this, Formatting.Indented)); + } } } } \ No newline at end of file