mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Make sure to close all pipes when detaching client (#228)
This commit is contained in:
parent
4760749402
commit
b336d928fe
1 changed files with 20 additions and 8 deletions
28
commands.go
28
commands.go
|
@ -790,6 +790,16 @@ func (srv *Server) CmdAttach(stdin io.ReadCloser, stdout io.Writer, args ...stri
|
||||||
if container == nil {
|
if container == nil {
|
||||||
return fmt.Errorf("No such container: %s", name)
|
return fmt.Errorf("No such container: %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cStdout, err := container.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cStderr, err := container.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
if container.Config.OpenStdin {
|
if container.Config.OpenStdin {
|
||||||
cStdin, err := container.StdinPipe()
|
cStdin, err := container.StdinPipe()
|
||||||
|
@ -800,14 +810,20 @@ func (srv *Server) CmdAttach(stdin io.ReadCloser, stdout io.Writer, args ...stri
|
||||||
go func() {
|
go func() {
|
||||||
Debugf("Begin stdin pipe [attach]")
|
Debugf("Begin stdin pipe [attach]")
|
||||||
io.Copy(cStdin, stdin)
|
io.Copy(cStdin, stdin)
|
||||||
|
|
||||||
|
// When stdin get closed, it means the client has been detached
|
||||||
|
// Make sure all pipes are closed.
|
||||||
|
if err := cStdout.Close(); err != nil {
|
||||||
|
Debugf("Error closing stdin pipe: %s", err)
|
||||||
|
}
|
||||||
|
if err := cStderr.Close(); err != nil {
|
||||||
|
Debugf("Error closing stderr pipe: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
wg.Add(-1)
|
wg.Add(-1)
|
||||||
Debugf("End of stdin pipe [attach]")
|
Debugf("End of stdin pipe [attach]")
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
cStdout, err := container.StdoutPipe()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
Debugf("Begin stdout pipe [attach]")
|
Debugf("Begin stdout pipe [attach]")
|
||||||
|
@ -815,10 +831,6 @@ func (srv *Server) CmdAttach(stdin io.ReadCloser, stdout io.Writer, args ...stri
|
||||||
wg.Add(-1)
|
wg.Add(-1)
|
||||||
Debugf("End of stdout pipe [attach]")
|
Debugf("End of stdout pipe [attach]")
|
||||||
}()
|
}()
|
||||||
cStderr, err := container.StderrPipe()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
Debugf("Begin stderr pipe [attach]")
|
Debugf("Begin stderr pipe [attach]")
|
||||||
|
|
Loading…
Reference in a new issue