Skip to content

Commit

Permalink
Fix status.json concurrency problem #150
Browse files Browse the repository at this point in the history
  • Loading branch information
dasgarner committed Feb 17, 2021
1 parent 924a484 commit 11e924d
Showing 1 changed file with 27 additions and 19 deletions.
46 changes: 27 additions & 19 deletions Log/ClientInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ public partial class ClientInfo : Form
// Delegate for updating the status file
public delegate void UpdateStatusFile();

/// <summary>
/// Use a locker for certain flie ops
/// </summary>
public static object _locker = new object();

/// <summary>
/// Set the schedule status
/// </summary>
Expand Down Expand Up @@ -323,32 +328,35 @@ public void UpdateStatusMarkerFile()
/// </summary>
private void updateStatusFile()
{
try
lock (_locker)
{
using (FileStream file = new FileStream(Path.Combine(ApplicationSettings.Default.LibraryPath, "status.json"), FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
try
{
using (StreamWriter sw = new StreamWriter(file))
using (FileStream file = new FileStream(Path.Combine(ApplicationSettings.Default.LibraryPath, "status.json"), FileMode.Create, FileAccess.Write, FileShare.Read))
{
using (JsonWriter writer = new JsonTextWriter(sw))
using (StreamWriter sw = new StreamWriter(file))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartObject();
writer.WritePropertyName("lastActivity");
writer.WriteValue(DateTime.Now.ToString());
writer.WritePropertyName("state");
writer.WriteValue(Thread.State.ToString());
writer.WritePropertyName("xmdsLastActivity");
writer.WriteValue(ApplicationSettings.Default.XmdsLastConnection.ToString());
writer.WritePropertyName("xmdsCollectInterval");
writer.WriteValue(ApplicationSettings.Default.CollectInterval.ToString());
writer.WriteEndObject();
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartObject();
writer.WritePropertyName("lastActivity");
writer.WriteValue(DateTime.Now.ToString());
writer.WritePropertyName("state");
writer.WriteValue(Thread.State.ToString());
writer.WritePropertyName("xmdsLastActivity");
writer.WriteValue(ApplicationSettings.Default.XmdsLastConnection.ToString());
writer.WritePropertyName("xmdsCollectInterval");
writer.WriteValue(ApplicationSettings.Default.CollectInterval.ToString());
writer.WriteEndObject();
}
}
}
}
}
catch (Exception e)
{
Trace.WriteLine(new LogMessage("ClientInfo - updateStatusFile", "Failed to update status file. e = " + e.Message), LogType.Error.ToString());
catch (Exception e)
{
Trace.WriteLine(new LogMessage("ClientInfo - updateStatusFile", "Failed to update status file. e = " + e.Message), LogType.Error.ToString());
}
}
}

Expand Down

0 comments on commit 11e924d

Please sign in to comment.