diff --git a/client/driver/exec.go b/client/driver/exec.go index c3e99a3e8..f097d0079 100644 --- a/client/driver/exec.go +++ b/client/driver/exec.go @@ -268,5 +268,8 @@ func (h *execHandle) run() { } h.waitCh <- cstructs.NewWaitResult(ps.ExitCode, 0, err) close(h.waitCh) + if err := h.executor.Exit(); err != nil { + h.logger.Printf("[ERR] driver.exec: error destroying executor: %v", err) + } h.pluginClient.Kill() } diff --git a/client/driver/executor/executor.go b/client/driver/executor/executor.go index 9ace1cb72..7afcef812 100644 --- a/client/driver/executor/executor.go +++ b/client/driver/executor/executor.go @@ -241,11 +241,6 @@ func (e *UniversalExecutor) UpdateTask(task *structs.Task) error { func (e *UniversalExecutor) wait() { defer close(e.processExited) err := e.cmd.Wait() - if e.syslogServer != nil { - e.syslogServer.Shutdown() - } - e.lre.Close() - e.lro.Close() if err == nil { e.exitState = &ProcessState{Pid: 0, ExitCode: 0, Time: time.Now()} return @@ -269,6 +264,12 @@ var ( // process func (e *UniversalExecutor) Exit() error { var merr multierror.Error + if e.syslogServer != nil { + e.syslogServer.Shutdown() + } + e.lre.Close() + e.lro.Close() + if e.command != nil && e.cmd.Process != nil { proc, err := os.FindProcess(e.cmd.Process.Pid) if err != nil { diff --git a/client/driver/java.go b/client/driver/java.go index 6d72eea4d..19b66ff84 100644 --- a/client/driver/java.go +++ b/client/driver/java.go @@ -339,5 +339,6 @@ func (h *javaHandle) run() { } h.waitCh <- &cstructs.WaitResult{ExitCode: ps.ExitCode, Signal: 0, Err: err} close(h.waitCh) + h.executor.Exit() h.pluginClient.Kill() } diff --git a/client/driver/qemu.go b/client/driver/qemu.go index ba9b77397..47d0ed5c5 100644 --- a/client/driver/qemu.go +++ b/client/driver/qemu.go @@ -334,5 +334,6 @@ func (h *qemuHandle) run() { close(h.doneCh) h.waitCh <- &cstructs.WaitResult{ExitCode: ps.ExitCode, Signal: 0, Err: err} close(h.waitCh) + h.executor.Exit() h.pluginClient.Kill() } diff --git a/client/driver/raw_exec.go b/client/driver/raw_exec.go index db7635959..564d8061a 100644 --- a/client/driver/raw_exec.go +++ b/client/driver/raw_exec.go @@ -235,5 +235,8 @@ func (h *rawExecHandle) run() { } h.waitCh <- &cstructs.WaitResult{ExitCode: ps.ExitCode, Signal: 0, Err: err} close(h.waitCh) + if err := h.executor.Exit(); err != nil { + h.logger.Printf("[ERR] driver.raw_exec: error killing executor: %v", err) + } h.pluginClient.Kill() } diff --git a/client/driver/rkt.go b/client/driver/rkt.go index ab7eb6472..e2fb6135d 100644 --- a/client/driver/rkt.go +++ b/client/driver/rkt.go @@ -357,5 +357,8 @@ func (h *rktHandle) run() { } h.waitCh <- cstructs.NewWaitResult(ps.ExitCode, 0, err) close(h.waitCh) + if err := h.executor.Exit(); err != nil { + h.logger.Printf("[ERR] driver.rkt: error killing executor: %v", err) + } h.pluginClient.Kill() }