Drain stderr and stdout concurrently for encoder validation

Some ffmpeg build might output extremely long traces for its banner that consume all pipe capacity and hangs the process. We have to drain both streams regardless on which one we actually read.
This commit is contained in:
gnattu
2026-07-24 19:58:31 +08:00
parent 88216e0ec4
commit d74babd8f3
@@ -8,6 +8,7 @@ using System.Linq;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using MediaBrowser.Controller.MediaEncoding;
using Microsoft.Extensions.Logging;
@@ -662,8 +663,15 @@ namespace MediaBrowser.MediaEncoding.Encoder
writer.Write(testKey);
}
using var reader = readStdErr ? process.StandardError : process.StandardOutput;
return reader.ReadToEnd();
// Drain both streams concurrently to prevent pipe hanging, see #17429
using var standardOutput = process.StandardOutput;
using var standardError = process.StandardError;
var standardOutputTask = standardOutput.ReadToEndAsync();
var standardErrorTask = standardError.ReadToEndAsync();
process.WaitForExit();
Task.WaitAll(standardOutputTask, standardErrorTask);
return (readStdErr ? standardErrorTask : standardOutputTask).GetAwaiter().GetResult();
}
}