diff options
author | Ian Lance Taylor <iant@golang.org> | 2016-11-15 17:55:28 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2016-11-16 02:24:30 +0000 |
commit | b906df653b58bc2ab9b93e18f62adccc8c1419b7 (patch) | |
tree | fa1a7a507fcaea633dc0c66348ea3fe0df942613 /src/os/exec/exec.go | |
parent | 1b66b38e25af567aa30a7b22581c05285be3564a (diff) | |
download | go-b906df653b58bc2ab9b93e18f62adccc8c1419b7.tar.gz go-b906df653b58bc2ab9b93e18f62adccc8c1419b7.zip |
os/exec: add closeOnce.WriteString method
Add an explicit WriteString method to closeOnce that acquires the
writers lock. This overrides the one promoted from the
embedded *os.File field. The promoted one naturally does not acquire
the lock, and can therefore race with the Close method.
Fixes #17647.
Change-Id: I3460f2a0d503449481cfb2fd4628b4855ab0ecdf
Reviewed-on: https://go-review.googlesource.com/33298
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/os/exec/exec.go')
-rw-r--r-- | src/os/exec/exec.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/os/exec/exec.go b/src/os/exec/exec.go index a3a0f20ebc..c4c5168b98 100644 --- a/src/os/exec/exec.go +++ b/src/os/exec/exec.go @@ -579,6 +579,13 @@ func (c *closeOnce) Write(b []byte) (int, error) { return n, err } +func (c *closeOnce) WriteString(s string) (int, error) { + c.writers.RLock() + n, err := c.File.WriteString(s) + c.writers.RUnlock() + return n, err +} + // StdoutPipe returns a pipe that will be connected to the command's // standard output when the command starts. // |