Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cio.copyIO: fix pipes potentially not being closed (Windows)
The defer functions were checking the local variable, and would therefore not be executed, as the function returned if an error occurred. Perhaps best illustrated when renaming the local variables; if fifos.Stdin != "" { l, err1 := winio.ListenPipe(fifos.Stdin, nil) if err1 != nil { return nil, errors.Wrapf(err1, "failed to create stdin pipe %s", fifos.Stdin) } defer func(l net.Listener) { if err1 != nil { l.Close() } }(l) // ... } if fifos.Stdout != "" { l, err2 := winio.ListenPipe(fifos.Stdout, nil) if err2 != nil { return nil, errors.Wrapf(err2, "failed to create stdout pipe %s", fifos.Stdout) } defer func(l net.Listener) { if err2 != nil { l.Close() } }(l) // .... } This patch changes the function to use a named return variable, and to use a single `defer()` that closes all pipes. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
- Loading branch information