Skip to content

Commit

Permalink
tty: clean up epollConsole closing
Browse files Browse the repository at this point in the history
ec0d23a ("tty: close epollConsole on errors") fixed a significant
issue, but the cleanup was not ideal (especially if the function is
changed in future to add additional error conditions to those currently
present). Using the defer-named-error trick avoids this issue and makes
the code more readable.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
  • Loading branch information
cyphar committed Sep 21, 2018
1 parent 00dc700 commit 5de99cd
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions tty.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func inheritStdio(process *libcontainer.Process) error {
return nil
}

func (t *tty) recvtty(process *libcontainer.Process, socket *os.File) error {
func (t *tty) recvtty(process *libcontainer.Process, socket *os.File) (Err error) {
f, err := utils.RecvFd(socket)
if err != nil {
return err
Expand All @@ -89,6 +89,11 @@ func (t *tty) recvtty(process *libcontainer.Process, socket *os.File) error {
if err != nil {
return err
}
defer func() {
if Err != nil {
epollConsole.Close()
}
}()
go epoller.Wait()
go io.Copy(epollConsole, os.Stdin)
t.wg.Add(1)
Expand All @@ -97,11 +102,9 @@ func (t *tty) recvtty(process *libcontainer.Process, socket *os.File) error {
// set raw mode to stdin and also handle interrupt
stdin, err := console.ConsoleFromFile(os.Stdin)
if err != nil {
epollConsole.Close()
return err
}
if err := stdin.SetRaw(); err != nil {
epollConsole.Close()
return fmt.Errorf("failed to set the terminal from the stdin: %v", err)
}
go handleInterrupt(stdin)
Expand Down

0 comments on commit 5de99cd

Please sign in to comment.