Skip to content

Commit

Permalink
Open log file with full share access; If "HARMONY_LOG_FILE" is set ap…
Browse files Browse the repository at this point in the history
…pend ".obsolete" to old FileLog (#83)

This fixes two issues:

By default we open log files with 0 share access, this means you can't even tail the file from an external process, this changes it to full share so one could even remove it while open (win will not actually delete until we release the handle though).

If the user sets the log file using HARMONY_LOG_FILE env var and makes any calls to the FileLog handler, this was a guaranteed crash due to the prior locking issue. Even though this will now fix the lock issue the obsolete handler would likely still cause issues as StreamWriter doesn't really expect others to write the file while its using it.

unrelated, the upstream harmony always appends the log file, vs HarmonyX which truncates on each start. I prefer the HX behavior but wanted to note the difference.
  • Loading branch information
mitchcapper authored Sep 5, 2023
1 parent 97b2a2e commit e457977
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Harmony/Tools/FileLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public static string LogPath
}
finally { }
}
else
_logPath += ".obsolete";
}
return _logPath;
}
Expand Down
2 changes: 1 addition & 1 deletion Harmony/Tools/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private static void ToggleDebug()
if (Enabled)
{
if (Writer == null)
Writer = new StreamWriter(File.Create(Path.GetFullPath(FileWriterPath)));
Writer = new StreamWriter(new FileStream(Path.GetFullPath(FileWriterPath),FileMode.Create, FileAccess.Write, FileShare.ReadWrite | FileShare.Delete));
Logger.MessageReceived += OnMessage;
}
else
Expand Down

0 comments on commit e457977

Please sign in to comment.