Change location of cleanup function
Signed-off-by: AKU <tom@tdpain.net>
This commit is contained in:
parent
412646bec5
commit
9d2310ca08
5 changed files with 23 additions and 22 deletions
|
@ -63,7 +63,8 @@ func run() error {
|
|||
|
||||
fmt.Println("\nRunning...\n")
|
||||
|
||||
for roe := range runner.Run() {
|
||||
r, cleanupFn := runner.Run()
|
||||
for roe := range r {
|
||||
if roe.Error != nil {
|
||||
return roe.Error
|
||||
}
|
||||
|
@ -71,6 +72,10 @@ func run() error {
|
|||
lookupTable[roe.Result.TaskID](roe.Result)
|
||||
}
|
||||
|
||||
if cleanupFn != nil {
|
||||
cleanupFn()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ func (c *customWriter) GetEntry() ([]byte, error) {
|
|||
return x, nil
|
||||
}
|
||||
|
||||
func readResultsFromCommand(cmd *exec.Cmd, cleanupFn func()) chan ResultOrError {
|
||||
func readResultsFromCommand(cmd *exec.Cmd) chan ResultOrError {
|
||||
|
||||
stdoutWriter := &customWriter{}
|
||||
stderrBuffer := new(bytes.Buffer)
|
||||
|
@ -123,10 +123,6 @@ func readResultsFromCommand(cmd *exec.Cmd, cleanupFn func()) chan ResultOrError
|
|||
close(c)
|
||||
|
||||
_ = cmd.Process.Kill()
|
||||
|
||||
if cleanupFn != nil {
|
||||
cleanupFn()
|
||||
}
|
||||
}()
|
||||
|
||||
return c
|
||||
|
|
|
@ -33,7 +33,7 @@ func (g *golangRunner) Queue(task *Task) {
|
|||
//go:embed interface/go.go
|
||||
var golangInterface []byte
|
||||
|
||||
func (g *golangRunner) Run() chan ResultOrError {
|
||||
func (g *golangRunner) Run() (chan ResultOrError, func()) {
|
||||
|
||||
wrapperFilename := "runtime-wrapper.go"
|
||||
wrapperExecutable := "runtime-wrapper"
|
||||
|
@ -44,7 +44,7 @@ func (g *golangRunner) Run() chan ResultOrError {
|
|||
// generate interaction data
|
||||
taskJSON, err := json.Marshal(g.tasks)
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
// determine package import path
|
||||
|
@ -60,7 +60,7 @@ func (g *golangRunner) Run() chan ResultOrError {
|
|||
ImportPath string
|
||||
}{importPath})
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
wrapperContent = b.Bytes()
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ func (g *golangRunner) Run() chan ResultOrError {
|
|||
// save interaction code
|
||||
err = ioutil.WriteFile(wrapperFilepath, wrapperContent, 0644)
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
// compile executable
|
||||
|
@ -78,16 +78,16 @@ func (g *golangRunner) Run() chan ResultOrError {
|
|||
cmd.Stderr = stderrBuffer
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
return makeErrorChan(fmt.Errorf("compilation failed: %s: %s", err, stderrBuffer.String()))
|
||||
return makeErrorChan(fmt.Errorf("compilation failed: %s: %s", err, stderrBuffer.String())), nil
|
||||
}
|
||||
|
||||
if !cmd.ProcessState.Success() {
|
||||
return makeErrorChan(errors.New("compilation failed, hence cannot continue"))
|
||||
return makeErrorChan(errors.New("compilation failed, hence cannot continue")), nil
|
||||
}
|
||||
|
||||
absExecPath, err := filepath.Abs(wrapperExecutableFilepath)
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
// run executable
|
||||
|
@ -96,9 +96,9 @@ func (g *golangRunner) Run() chan ResultOrError {
|
|||
|
||||
cmd.Stdin = bytes.NewReader(append(taskJSON, '\n'))
|
||||
|
||||
return readResultsFromCommand(cmd, func() {
|
||||
return readResultsFromCommand(cmd), func() {
|
||||
// remove leftover files
|
||||
_ = os.Remove(wrapperFilepath)
|
||||
_ = os.Remove(wrapperExecutableFilepath)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -30,7 +30,7 @@ func (p *pythonRunner) Queue(task *Task) {
|
|||
//go:embed interface/python.py
|
||||
var pythonInterface []byte
|
||||
|
||||
func (p *pythonRunner) Run() chan ResultOrError {
|
||||
func (p *pythonRunner) Run() (chan ResultOrError, func()) {
|
||||
|
||||
wrapperFilename := "runtime-wrapper.py"
|
||||
wrapperFilepath := filepath.Join(p.dir, wrapperFilename)
|
||||
|
@ -38,18 +38,18 @@ func (p *pythonRunner) Run() chan ResultOrError {
|
|||
// Generate interaction data
|
||||
taskJSON, err := json.Marshal(p.tasks)
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
// Save interaction code
|
||||
err = ioutil.WriteFile(wrapperFilepath, pythonInterface, 0644)
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return makeErrorChan(err)
|
||||
return makeErrorChan(err), nil
|
||||
}
|
||||
|
||||
pythonPathVar := filepath.Join(cwd, "lib")
|
||||
|
@ -61,8 +61,8 @@ func (p *pythonRunner) Run() chan ResultOrError {
|
|||
|
||||
cmd.Stdin = bytes.NewReader(append(taskJSON, '\n'))
|
||||
|
||||
return readResultsFromCommand(cmd, func() {
|
||||
return readResultsFromCommand(cmd), func() {
|
||||
// Remove leftover files
|
||||
_ = os.Remove(wrapperFilepath)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ const (
|
|||
|
||||
type Runner interface {
|
||||
Queue(task *Task)
|
||||
Run() chan ResultOrError
|
||||
Run() (chan ResultOrError, func())
|
||||
}
|
||||
|
||||
type ResultOrError struct {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue