From 91c5c96afc3a070ca8b491a3e992ef5dbcb70d54 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 11 Mar 2025 20:05:05 +0800 Subject: [PATCH] fix: accessing `dummy` in multi-threads throws exception Signed-off-by: leo --- src/Commands/Command.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Commands/Command.cs b/src/Commands/Command.cs index cedaf674..5197de11 100644 --- a/src/Commands/Command.cs +++ b/src/Commands/Command.cs @@ -73,6 +73,7 @@ namespace SourceGit.Commands }; var dummy = null as Process; + var dummyProcLock = new object(); try { proc.Start(); @@ -83,11 +84,10 @@ namespace SourceGit.Commands dummy = proc; CancellationToken.Register(() => { - if (dummy is { HasExited: false }) + lock (dummyProcLock) { - dummy.CancelErrorRead(); - dummy.CancelOutputRead(); - dummy.Kill(); + if (dummy is { HasExited: false }) + dummy.Kill(); } }); } @@ -104,7 +104,14 @@ namespace SourceGit.Commands proc.BeginErrorReadLine(); proc.WaitForExit(); - dummy = null; + if (dummy != null) + { + lock (dummyProcLock) + { + dummy = null; + } + } + int exitCode = proc.ExitCode; proc.Close();