From f5ecbaee68876131f7783a06f5755607128900b4 Mon Sep 17 00:00:00 2001 From: Sergey Nechaev <6499856+snechaev@users.noreply.github.com> Date: Tue, 21 Oct 2025 17:29:27 +0200 Subject: [PATCH] Fixed a race condition that occurred when handling the cancellation of an asynchronous operation after the FFmpeg process had already exited. Fixes #348. Related: #592 --- FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs b/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs index 2f350ce..8191223 100644 --- a/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs +++ b/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs @@ -166,12 +166,28 @@ public class FFMpegArgumentProcessor void OnCancelEvent(object sender, int timeout) { - instance.SendInput("q"); + ExecuteIgnoringFinishedProcessExceptions(() => instance.SendInput("q")); if (!cancellationTokenSource.Token.WaitHandle.WaitOne(timeout, true)) { cancellationTokenSource.Cancel(); - instance.Kill(); + ExecuteIgnoringFinishedProcessExceptions(() => instance.Kill()); + } + + static void ExecuteIgnoringFinishedProcessExceptions(Action action) + { + try + { + action(); + } + catch (Instances.Exceptions.InstanceProcessAlreadyExitedException) + { + //ignore + } + catch (ObjectDisposedException) + { + //ignore + } } }