Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2495779

Browse files
authored
fix: ensure mutagen daemon log is closed (#84)
1 parentb84a4ed commit2495779

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)

[8]ページ先頭

©2009-2025 Movatter.jp