diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2011-07-11 15:59:27 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2011-07-11 15:59:27 -0700 |
| commit | 1722ec22cd6a34dcef717cc242e3e1ac24366069 (patch) | |
| tree | 453d0f03ca07f9796b02d9313624caa20278db35 /src/pkg/exec | |
| parent | d53385fd0c986c33c60e4d6fce6b39b6bd779a72 (diff) | |
| download | go-1722ec22cd6a34dcef717cc242e3e1ac24366069.tar.xz | |
cgi: close stdout reader pipe when finished
This causes the child, if still writing, to get an error or
SIGPIPE and most likely exit so our subsequent wait can
finish.
A more guaranteed fix would be putting a time limit on the
child's overall execution, but this fixes the problem
I was having.
Fixes #2059
R=rsc
CC=golang-dev
https://golang.org/cl/4675081
Diffstat (limited to 'src/pkg/exec')
| -rw-r--r-- | src/pkg/exec/exec.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/pkg/exec/exec.go b/src/pkg/exec/exec.go index 4ddefae24e..3b20f2008c 100644 --- a/src/pkg/exec/exec.go +++ b/src/pkg/exec/exec.go @@ -338,7 +338,8 @@ func (c *Cmd) StdinPipe() (io.WriteCloser, os.Error) { // StdoutPipe returns a pipe that will be connected to the command's // standard output when the command starts. -func (c *Cmd) StdoutPipe() (io.Reader, os.Error) { +// The pipe will be closed automatically after Wait sees the command exit. +func (c *Cmd) StdoutPipe() (io.ReadCloser, os.Error) { if c.Stdout != nil { return nil, os.NewError("exec: Stdout already set") } @@ -357,7 +358,8 @@ func (c *Cmd) StdoutPipe() (io.Reader, os.Error) { // StderrPipe returns a pipe that will be connected to the command's // standard error when the command starts. -func (c *Cmd) StderrPipe() (io.Reader, os.Error) { +// The pipe will be closed automatically after Wait sees the command exit. +func (c *Cmd) StderrPipe() (io.ReadCloser, os.Error) { if c.Stderr != nil { return nil, os.NewError("exec: Stderr already set") } |
