diff --git a/Gopkg.lock b/Gopkg.lock index a3ace871..5acb6e3d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -155,11 +155,11 @@ [[projects]] branch = "master" - digest = "1:e0306e92cef41d02af05a9f88395ec49c94f0255d54ca88ee3c02ae8f5806ee3" + digest = "1:7c71e4035e802da25ad590ae5f1cb0e931b2b4806aa0b5539d53c02a1cf6a64d" name = "github.com/jesseduffield/termbox-go" packages = ["."] pruneopts = "NUT" - revision = "a9796224c07f5d757b399082bfee60de9574a2d9" + revision = "9dd53af7214ead48bbe380cdf8a3229ec43eeb58" [[projects]] branch = "v2" diff --git a/Gopkg.toml b/Gopkg.toml index 8cad8078..683fce3d 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -48,7 +48,3 @@ [[constraint]] branch = "v2" name = "github.com/jesseduffield/yaml" - -[[constraint]] - branch = "master" - name = "github.com/jesseduffield/roll" diff --git a/pkg/commands/os.go b/pkg/commands/os.go index 1e9d8118..3c420fdd 100644 --- a/pkg/commands/os.go +++ b/pkg/commands/os.go @@ -370,6 +370,10 @@ func (c *OSCommand) PipeCommands(commandStrings ...string) error { // Kill kills a process. If the process has Setpgid == true, then we have anticipated that it might spawn its own child processes, so we've given it a process group ID (PGID) equal to its process id (PID) and given its child processes will inherit the PGID, we can kill that group, rather than killing the process itself. func (c *OSCommand) Kill(cmd *exec.Cmd) error { + if cmd.Process == nil { + // somebody got to it before we were able to, poor bastard + return nil + } if cmd.SysProcAttr != nil && cmd.SysProcAttr.Setpgid == true { // minus sign means we're talking about a PGID as opposed to a PID return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 4b5a6135..22ec1d99 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -193,7 +193,9 @@ func (gui *Gui) renderContainerLogs(container *commands.Container) error { go func() { <-stop - cmd.Process.Kill() + if err := gui.OSCommand.Kill(cmd); err != nil { + gui.Log.Warn(err) + } gui.Log.Info("killed container logs process") return }() diff --git a/vendor/github.com/jesseduffield/termbox-go/api.go b/vendor/github.com/jesseduffield/termbox-go/api.go index 66a13814..3aa43711 100644 --- a/vendor/github.com/jesseduffield/termbox-go/api.go +++ b/vendor/github.com/jesseduffield/termbox-go/api.go @@ -22,6 +22,8 @@ import "time" // } // defer termbox.Close() func Init() error { + quitPolling = make(chan int) + var err error out, err = os.OpenFile("/dev/tty", syscall.O_WRONLY, 0) @@ -120,7 +122,7 @@ func Interrupt() { // when termbox's functionality isn't required anymore. func Close() { quit <- 1 - quitPolling <- 1 + close(quitPolling) out.WriteString(funcs[t_show_cursor]) out.WriteString(funcs[t_sgr0]) out.WriteString(funcs[t_clear_screen]) diff --git a/vendor/github.com/jesseduffield/termbox-go/termbox.go b/vendor/github.com/jesseduffield/termbox-go/termbox.go index 15d3e0e2..e3f353a5 100644 --- a/vendor/github.com/jesseduffield/termbox-go/termbox.go +++ b/vendor/github.com/jesseduffield/termbox-go/termbox.go @@ -77,7 +77,7 @@ var ( sigwinch = make(chan os.Signal, 1) sigio = make(chan os.Signal, 1) quit = make(chan int) - quitPolling = make(chan int) + quitPolling chan int // get set on each initialize input_comm = make(chan input_event) interrupt_comm = make(chan struct{}) intbuf = make([]byte, 0, 16)