Fixed race condition on Named pipe dispose/disconnect

This commit is contained in:
Ashish 2025-07-04 23:12:05 +10:00 committed by GitHub
parent 37973c3daf
commit d608026d17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -31,9 +31,13 @@ namespace FFMpegCore.Arguments
public void Post() public void Post()
{ {
Debug.WriteLine($"Disposing NamedPipeServerStream on {GetType().Name}"); Debug.WriteLine($"Disposing NamedPipeServerStream on {GetType().Name}");
lock(Pipe)
{
Pipe?.Dispose(); Pipe?.Dispose();
Pipe = null!; Pipe = null!;
} }
}
public async Task During(CancellationToken cancellationToken = default) public async Task During(CancellationToken cancellationToken = default)
{ {
@ -48,12 +52,18 @@ namespace FFMpegCore.Arguments
finally finally
{ {
Debug.WriteLine($"Disconnecting NamedPipeServerStream on {GetType().Name}"); Debug.WriteLine($"Disconnecting NamedPipeServerStream on {GetType().Name}");
lock (Pipe ?? new object())
//if Pipe is null, then the lock doesnt matter,
//Because the next code will not execute anyways.
//so we can use a new object
{
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);
public abstract string Text { get; } public abstract string Text { get; }