mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Add timeout to ffmpeg hardware tests (#6154)
This commit is contained in:
@@ -5,9 +5,11 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/stashapp/stash/pkg/logger"
|
"github.com/stashapp/stash/pkg/logger"
|
||||||
"github.com/stashapp/stash/pkg/models"
|
"github.com/stashapp/stash/pkg/models"
|
||||||
@@ -64,12 +66,32 @@ func (f *FFMpeg) InitHWSupport(ctx context.Context) {
|
|||||||
args = args.Format("null")
|
args = args.Format("null")
|
||||||
args = args.Output("-")
|
args = args.Output("-")
|
||||||
|
|
||||||
cmd := f.Command(ctx, args)
|
// #6064 - add timeout to context to prevent hangs
|
||||||
|
const hwTestTimeoutSecondsDefault = 1
|
||||||
|
hwTestTimeoutSeconds := hwTestTimeoutSecondsDefault * time.Second
|
||||||
|
|
||||||
|
// allow timeout to be overridden with environment variable
|
||||||
|
if timeout := os.Getenv("STASH_HW_TEST_TIMEOUT"); timeout != "" {
|
||||||
|
if seconds, err := strconv.Atoi(timeout); err == nil {
|
||||||
|
hwTestTimeoutSeconds = time.Duration(seconds) * time.Second
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testCtx, cancel := context.WithTimeout(ctx, hwTestTimeoutSeconds)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
cmd := f.Command(testCtx, args)
|
||||||
|
logger.Tracef("[InitHWSupport] Testing codec %s: %v", codec, cmd.Args)
|
||||||
|
|
||||||
var stderr bytes.Buffer
|
var stderr bytes.Buffer
|
||||||
cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
|
if testCtx.Err() != nil {
|
||||||
|
logger.Debugf("[InitHWSupport] Codec %s test timed out after %d seconds", codec, hwTestTimeoutSeconds)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
errOutput := stderr.String()
|
errOutput := stderr.String()
|
||||||
|
|
||||||
if len(errOutput) == 0 {
|
if len(errOutput) == 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user