From d0a10bafbd3b3949b3ba6d1e77891f18f55086ad Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 25 Jul 2025 07:43:59 +0200 Subject: [PATCH] Close a task's stdout pipe when we are done with it This is similar to what we do when running tasks in a pty (we close the pty there), and it should cause the called command to terminate. --- pkg/gui/tasks_adapter.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/gui/tasks_adapter.go b/pkg/gui/tasks_adapter.go index 545c45471..151d1566b 100644 --- a/pkg/gui/tasks_adapter.go +++ b/pkg/gui/tasks_adapter.go @@ -18,10 +18,13 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error manager := gui.getManager(view) + var r io.ReadCloser start := func() (*exec.Cmd, io.Reader) { - r, err := cmd.StdoutPipe() + var err error + r, err = cmd.StdoutPipe() if err != nil { gui.c.Log.Error(err) + r = nil } cmd.Stderr = cmd.Stdout @@ -32,8 +35,15 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error return cmd, r } + onClose := func() { + if r != nil { + r.Close() + r = nil + } + } + linesToRead := gui.linesToReadFromCmdTask(view) - if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, nil), cmdStr); err != nil { + if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, onClose), cmdStr); err != nil { gui.c.Log.Error(err) }