Skip to content

Commit d0a10ba

Browse files
committed
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.
1 parent 47afa7e commit d0a10ba

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

pkg/gui/tasks_adapter.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
1818

1919
manager := gui.getManager(view)
2020

21+
var r io.ReadCloser
2122
start := func() (*exec.Cmd, io.Reader) {
22-
r, err := cmd.StdoutPipe()
23+
var err error
24+
r, err = cmd.StdoutPipe()
2325
if err != nil {
2426
gui.c.Log.Error(err)
27+
r = nil
2528
}
2629
cmd.Stderr = cmd.Stdout
2730

@@ -32,8 +35,15 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
3235
return cmd, r
3336
}
3437

38+
onClose := func() {
39+
if r != nil {
40+
r.Close()
41+
r = nil
42+
}
43+
}
44+
3545
linesToRead := gui.linesToReadFromCmdTask(view)
36-
if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, nil), cmdStr); err != nil {
46+
if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, onClose), cmdStr); err != nil {
3747
gui.c.Log.Error(err)
3848
}
3949

0 commit comments

Comments
 (0)