This commit is contained in:
Pete 2025-10-16 14:04:14 +02:00 committed by GitHub
commit 7f85dcf593
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 17 deletions

View file

@ -15,7 +15,7 @@ public class FFMpegArgumentProcessorTest
[TestMethod] [TestMethod]
public void Processor_GlobalOptions_GetUsed() public void Processor_GlobalOptions_GetUsed()
{ {
var globalWorkingDir = "Whatever"; var globalWorkingDir = "Whatever1";
var processor = CreateArgumentProcessor(); var processor = CreateArgumentProcessor();
try try
@ -47,7 +47,7 @@ public class FFMpegArgumentProcessorTest
[TestMethod] [TestMethod]
public void Processor_Options_CanBeOverridden_And_Configured() public void Processor_Options_CanBeOverridden_And_Configured()
{ {
var globalConfig = "Whatever"; var globalConfig = "Whatever2";
try try
{ {
@ -59,14 +59,14 @@ public class FFMpegArgumentProcessorTest
var overrideOptions = new FFOptions { WorkingDirectory = "override" }; var overrideOptions = new FFOptions { WorkingDirectory = "override" };
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig }); GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig });
var options = processor.GetConfiguredOptions(overrideOptions); var configuredOptions = processor.GetConfiguredOptions(overrideOptions);
Assert.AreEqual(options.WorkingDirectory, overrideOptions.WorkingDirectory); Assert.AreEqual(configuredOptions.WorkingDirectory, overrideOptions.WorkingDirectory);
Assert.AreEqual(options.TemporaryFilesFolder, overrideOptions.TemporaryFilesFolder); Assert.AreEqual(configuredOptions.TemporaryFilesFolder, overrideOptions.TemporaryFilesFolder);
Assert.AreEqual(options.BinaryFolder, overrideOptions.BinaryFolder); Assert.AreEqual(configuredOptions.BinaryFolder, overrideOptions.BinaryFolder);
Assert.AreEqual(sessionTempDir, options.TemporaryFilesFolder); Assert.AreEqual(sessionTempDir, configuredOptions.TemporaryFilesFolder);
Assert.AreNotEqual(globalConfig, options.BinaryFolder); Assert.AreNotEqual(globalConfig, configuredOptions.BinaryFolder);
} }
finally finally
{ {
@ -77,7 +77,7 @@ public class FFMpegArgumentProcessorTest
[TestMethod] [TestMethod]
public void Options_Global_And_Session_Options_Can_Differ() public void Options_Global_And_Session_Options_Can_Differ()
{ {
var globalWorkingDir = "Whatever"; var globalWorkingDir = "Whatever3";
try try
{ {

View file

@ -7,6 +7,7 @@ namespace FFMpegCore.Arguments;
public abstract class PipeArgument public abstract class PipeArgument
{ {
private readonly PipeDirection _direction; private readonly PipeDirection _direction;
private readonly object _pipeLock = new();
protected PipeArgument(PipeDirection direction) protected PipeArgument(PipeDirection direction)
{ {
@ -21,6 +22,8 @@ public abstract class PipeArgument
public abstract string Text { get; } public abstract string Text { get; }
public void Pre() public void Pre()
{
lock (_pipeLock)
{ {
if (Pipe != null) if (Pipe != null)
{ {
@ -29,13 +32,17 @@ public abstract class PipeArgument
Pipe = new NamedPipeServerStream(PipeName, _direction, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous); Pipe = new NamedPipeServerStream(PipeName, _direction, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
} }
}
public void Post() public void Post()
{ {
Debug.WriteLine($"Disposing NamedPipeServerStream on {GetType().Name}"); Debug.WriteLine($"Disposing NamedPipeServerStream on {GetType().Name}");
lock (_pipeLock)
{
Pipe?.Dispose(); Pipe?.Dispose();
Pipe = null!; Pipe = null!;
} }
}
public async Task During(CancellationToken cancellationToken = default) public async Task During(CancellationToken cancellationToken = default)
{ {
@ -50,12 +57,15 @@ public abstract class PipeArgument
finally finally
{ {
Debug.WriteLine($"Disconnecting NamedPipeServerStream on {GetType().Name}"); Debug.WriteLine($"Disconnecting NamedPipeServerStream on {GetType().Name}");
lock (_pipeLock)
{
if (Pipe is { IsConnected: true }) if (Pipe is { IsConnected: true })
{ {
Pipe.Disconnect(); Pipe.Disconnect();
} }
} }
} }
}
protected abstract Task ProcessDataAsync(CancellationToken token); protected abstract Task ProcessDataAsync(CancellationToken token);
} }