From f902a57f608ebcba7e6c2f8328bf3237933e39af Mon Sep 17 00:00:00 2001 From: Jason Alborough Date: Tue, 19 Apr 2022 15:19:27 -0400 Subject: [PATCH] feature: add fileLock for reads --- .../PepperDashEssentialsBase/File/FileIO.cs | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/File/FileIO.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/File/FileIO.cs index 21d9eaec..51d64230 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/File/FileIO.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/File/FileIO.cs @@ -79,19 +79,27 @@ namespace PepperDash.Essentials.Core { try { - DirectoryInfo dirInfo = new DirectoryInfo(file.Name); - Debug.Console(2, "FileIO Getting Data {0}", file.FullName); - - if (File.Exists(file.FullName)) + if (fileLock.TryEnter()) { - using (StreamReader r = new StreamReader(file.FullName)) + DirectoryInfo dirInfo = new DirectoryInfo(file.Name); + Debug.Console(2, "FileIO Getting Data {0}", file.FullName); + + if (File.Exists(file.FullName)) { - return r.ReadToEnd(); + using (StreamReader r = new StreamReader(file.FullName)) + { + return r.ReadToEnd(); + } + } + else + { + Debug.Console(2, "File {0} does not exsist", file.FullName); + return ""; } } else { - Debug.Console(2, "File {0} does not exsist", file.FullName); + Debug.Console(0, Debug.ErrorLogLevel.Error, "FileIO Unable to enter FileLock"); return ""; } @@ -101,6 +109,12 @@ namespace PepperDash.Essentials.Core Debug.Console(0, Debug.ErrorLogLevel.Error, "Error: FileIO read failed: \r{0}", e); return ""; } + finally + { + if (fileLock != null && !fileLock.Disposed) + fileLock.Leave(); + + } } @@ -133,23 +147,30 @@ namespace PepperDash.Essentials.Core string data; try { - DirectoryInfo dirInfo = new DirectoryInfo(file.Name); - Debug.Console(2, "FileIO Getting Data {0}", file.FullName); - - - if (File.Exists(file.FullName)) + if (fileLock.TryEnter()) { - using (StreamReader r = new StreamReader(file.FullName)) + DirectoryInfo dirInfo = new DirectoryInfo(file.Name); + Debug.Console(2, "FileIO Getting Data {0}", file.FullName); + + + if (File.Exists(file.FullName)) { - data = r.ReadToEnd(); + using (StreamReader r = new StreamReader(file.FullName)) + { + data = r.ReadToEnd(); + } } + else + { + Debug.Console(2, "File {0} Does not exsist", file.FullName); + data = ""; + } + GotFileEvent.Invoke(null, new FileEventArgs(data)); } else { - Debug.Console(2, "File {0} Does not exsist", file.FullName); - data = ""; + Debug.Console(0, Debug.ErrorLogLevel.Error, "FileIO Unable to enter FileLock"); } - GotFileEvent.Invoke(null, new FileEventArgs(data)); } catch (Exception e) @@ -157,6 +178,12 @@ namespace PepperDash.Essentials.Core Debug.Console(0, Debug.ErrorLogLevel.Error, "Error: FileIO read failed: \r{0}", e); data = ""; } + finally + { + if (fileLock != null && !fileLock.Disposed) + fileLock.Leave(); + + }