Skip to content

Commit 2495779

Browse files
authored
fix: ensure mutagen daemon log is closed (#84)
1 parent b84a4ed commit 2495779

File tree

1 file changed

+52
-15
lines changed

1 file changed

+52
-15
lines changed

‎App/Services/MutagenController.cs‎

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
usingCoder.Desktop.MutagenSdk.Proto.Url;
1717
usingCoder.Desktop.Vpn.Utilities;
1818
usingGrpc.Core;
19-
usingMicrosoft.Extensions.Options;
19+
usingMicrosoft.Extensions.Hosting;
2020
usingMicrosoft.Extensions.Logging;
21+
usingMicrosoft.Extensions.Options;
2122
usingSerilog;
2223
usingDaemonTerminateRequest=Coder.Desktop.MutagenSdk.Proto.Service.Daemon.TerminateRequest;
2324
usingMutagenProtocol=Coder.Desktop.MutagenSdk.Proto.Url.Protocol;
2425
usingSynchronizationTerminateRequest=Coder.Desktop.MutagenSdk.Proto.Service.Synchronization.TerminateRequest;
25-
usingMicrosoft.Extensions.Hosting;
2626

2727
namespaceCoder.Desktop.App.Services;
2828

@@ -556,25 +556,62 @@ private void StartDaemonProcess()
556556
varlogPath=Path.Combine(_mutagenDataDirectory,"daemon.log");
557557
varlogStream=newStreamWriter(logPath,true);
558558

559-
_daemonProcess=newProcess();
560-
_daemonProcess.StartInfo.FileName=_mutagenExecutablePath;
561-
_daemonProcess.StartInfo.Arguments="daemon run";
562-
_daemonProcess.StartInfo.Environment.Add("MUTAGEN_DATA_DIRECTORY",_mutagenDataDirectory);
563-
_daemonProcess.StartInfo.Environment.Add("MUTAGEN_SSH_CONFIG_PATH","none");// do not use ~/.ssh/config
559+
_logger.LogInformation("starting mutagen daemon process with executable path '{path}'",_mutagenExecutablePath);
560+
_logger.LogInformation("mutagen data directory '{path}'",_mutagenDataDirectory);
561+
_logger.LogInformation("mutagen daemon log path '{path}'",logPath);
562+
563+
vardaemonProcess=newProcess();
564+
daemonProcess.StartInfo.FileName=_mutagenExecutablePath;
565+
daemonProcess.StartInfo.Arguments="daemon run";
566+
daemonProcess.StartInfo.Environment.Add("MUTAGEN_DATA_DIRECTORY",_mutagenDataDirectory);
567+
daemonProcess.StartInfo.Environment.Add("MUTAGEN_SSH_CONFIG_PATH","none");// do not use ~/.ssh/config
564568
// hide the console window
565-
_daemonProcess.StartInfo.CreateNoWindow=true;
569+
daemonProcess.StartInfo.CreateNoWindow=true;
566570
// shell needs to be disabled since we set the environment
567571
// https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.environment?view=net-8.0
568-
_daemonProcess.StartInfo.UseShellExecute=false;
569-
_daemonProcess.StartInfo.RedirectStandardError=true;
570-
_daemonProcess.EnableRaisingEvents=true;
571-
_daemonProcess.Exited+=(object?sender,EventArgse)=>
572+
daemonProcess.StartInfo.UseShellExecute=false;
573+
daemonProcess.StartInfo.RedirectStandardError=true;
574+
daemonProcess.EnableRaisingEvents=true;
575+
daemonProcess.Exited+=(_,_)=>
572576
{
573-
_logger.LogInformation("mutagen daemon exited with code{exitCode}",_daemonProcess?.ExitCode);
577+
varexitCode=-1;
578+
try
579+
{
580+
// ReSharper disable once AccessToDisposedClosure
581+
exitCode=daemonProcess.ExitCode;
582+
}
583+
catch
584+
{
585+
// ignored
586+
}
587+
588+
_logger.LogInformation("mutagen daemon exited with code{exitCode}",exitCode);
574589
};
575-
if(!_daemonProcess.Start())
576-
thrownewInvalidOperationException("Failed to start mutagen daemon process, Start returned false");
577590

591+
try
592+
{
593+
if(!daemonProcess.Start())
594+
thrownewInvalidOperationException("Failed to start mutagen daemon process, Start returned false");
595+
}
596+
catch(Exceptione)
597+
{
598+
_logger.LogWarning(e,"mutagen daemon failed to start");
599+
600+
logStream.Dispose();
601+
try
602+
{
603+
daemonProcess.Kill();
604+
}
605+
catch
606+
{
607+
// ignored, the process likely doesn't exist
608+
}
609+
610+
daemonProcess.Dispose();
611+
throw;
612+
}
613+
614+
_daemonProcess=daemonProcess;
578615
varwriter=newLogWriter(_daemonProcess.StandardError,logStream);
579616
Task.Run(()=>{_=writer.Run();});
580617
_logWriter=writer;

0 commit comments

Comments
(0)