Compare commits

...

1 Commits

Author SHA1 Message Date
gnattu
d74babd8f3 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.
2026-07-24 20:01:01 +08:00

View File

@@ -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();
}
}