summaryrefslogtreecommitdiff
path: root/rhimport/converter.go
diff options
context:
space:
mode:
authorChristian Pointner <equinox@helsinki.at>2016-07-14 22:15:55 (GMT)
committerChristian Pointner <equinox@helsinki.at>2016-07-14 22:15:55 (GMT)
commit79dfe23a8cfabe4688a3b05998178a11ea51150c (patch)
tree9bab4e5317ea4efcd19f32113f3ec861b7b0603a /rhimport/converter.go
parent09d298877fdf473ebe5a997b20a42b4e69355c67 (diff)
improved canceling
Diffstat (limited to 'rhimport/converter.go')
-rw-r--r--rhimport/converter.go53
1 files changed, 42 insertions, 11 deletions
diff --git a/rhimport/converter.go b/rhimport/converter.go
index 0546b97..7c35c07 100644
--- a/rhimport/converter.go
+++ b/rhimport/converter.go
@@ -29,6 +29,7 @@ import (
"errors"
"fmt"
"io"
+ "net/http"
"os"
"os/exec"
"path/filepath"
@@ -133,9 +134,16 @@ func (ff *FFMpegFetchConverter) Close() (err error) {
func (ff *FFMpegFetchConverter) GetResult(ctx *Context, res *Result) (result string, err error) {
if ff.result != nil {
- r := <-ff.result
- ctx.LoudnessCorr = r.loudnessCorr
- return r.output, r.err
+ select {
+ case r := <-ff.result:
+ ctx.LoudnessCorr = r.loudnessCorr
+ return r.output, r.err
+ case <-ctx.Cancel:
+ ff.cmd.Process.Kill()
+ res.ResponseCode = http.StatusNoContent
+ res.ErrorString = "canceled"
+ return "", errors.New("canceled")
+ }
}
return "", nil
}
@@ -201,9 +209,16 @@ func (bs *BS1770FetchConverter) Close() (err error) {
func (bs *BS1770FetchConverter) GetResult(ctx *Context, res *Result) (result string, err error) {
if bs.result != nil {
- r := <-bs.result
- ctx.LoudnessCorr = r.loudnessCorr
- return r.output, r.err
+ select {
+ case r := <-bs.result:
+ ctx.LoudnessCorr = r.loudnessCorr
+ return r.output, r.err
+ case <-ctx.Cancel:
+ bs.cmd.Process.Kill()
+ res.ResponseCode = http.StatusNoContent
+ res.ErrorString = "canceled"
+ return "", errors.New("canceled")
+ }
}
return "", nil
}
@@ -284,13 +299,29 @@ func (ff *FFMpegBS1770FetchConverter) Close() (err error) {
}
func (ff *FFMpegBS1770FetchConverter) GetResult(ctx *Context, res *Result) (result string, err error) {
- var rff, rbs FetchConverterResult
- if ff.resultFF != nil {
- rff = <-ff.resultFF
+ if ff.resultFF == nil || ff.resultBS == nil {
+ return "", nil
}
- if ff.resultBS != nil {
- rbs = <-ff.resultBS
+
+ var rff, rbs *FetchConverterResult
+ for {
+ select {
+ case r := <-ff.resultFF:
+ rff = &r
+ case r := <-ff.resultBS:
+ rbs = &r
+ case <-ctx.Cancel:
+ ff.ffmpeg.Process.Kill()
+ ff.bs1770.Process.Kill()
+ res.ResponseCode = http.StatusNoContent
+ res.ErrorString = "canceled"
+ return "", errors.New("canceled")
+ }
+ if rff != nil && rbs != nil {
+ break
+ }
}
+
if rff.err != nil {
return rff.output, fmt.Errorf("ffmpeg: %v", rff.err)
}