Fix race condition in running encoders (#199)

This commit is contained in:
WithoutPants 2019-11-15 05:27:13 +11:00 committed by StashAppDev
parent 06fa88cc0a
commit 49c9b1aa9a

View file

@ -7,6 +7,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
"sync"
"time" "time"
"github.com/stashapp/stash/pkg/logger" "github.com/stashapp/stash/pkg/logger"
@ -16,7 +17,10 @@ type Encoder struct {
Path string Path string
} }
var runningEncoders map[string][]*os.Process = make(map[string][]*os.Process) var (
runningEncoders map[string][]*os.Process = make(map[string][]*os.Process)
runningEncodersMutex = sync.RWMutex{}
)
func NewEncoder(ffmpegPath string) Encoder { func NewEncoder(ffmpegPath string) Encoder {
return Encoder{ return Encoder{
@ -25,12 +29,16 @@ func NewEncoder(ffmpegPath string) Encoder {
} }
func registerRunningEncoder(path string, process *os.Process) { func registerRunningEncoder(path string, process *os.Process) {
runningEncodersMutex.Lock()
processes := runningEncoders[path] processes := runningEncoders[path]
runningEncoders[path] = append(processes, process) runningEncoders[path] = append(processes, process)
runningEncodersMutex.Unlock()
} }
func deregisterRunningEncoder(path string, process *os.Process) { func deregisterRunningEncoder(path string, process *os.Process) {
runningEncodersMutex.Lock()
defer runningEncodersMutex.Unlock()
processes := runningEncoders[path] processes := runningEncoders[path]
for i, v := range processes { for i, v := range processes {
@ -49,7 +57,9 @@ func waitAndDeregister(path string, cmd *exec.Cmd) error {
} }
func KillRunningEncoders(path string) { func KillRunningEncoders(path string) {
runningEncodersMutex.RLock()
processes := runningEncoders[path] processes := runningEncoders[path]
runningEncodersMutex.RUnlock()
for _, process := range processes { for _, process := range processes {
// assume it worked, don't check for error // assume it worked, don't check for error