mirror of
https://github.com/golang/go
synced 2024-11-12 03:00:22 -07:00
os: simplify windows Pipe
windows version of Pipe function is implemented by calling syscall.Pipe which returns handles inheritable by client process, and then adjusting returned handles with syscall.CloseOnExec. Just create non-inheritable handles in the first place. Now that we don't have a race window in the code, drop use of syscall.ForkLock. Change-Id: Ie325da7c2397b5995db4a5ddb0117e2ce1745187 Reviewed-on: https://go-review.googlesource.com/72010 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
6db4950dc5
commit
6407b3c80e
@ -310,18 +310,10 @@ func rename(oldname, newname string) error {
|
||||
// It returns the files and an error, if any.
|
||||
func Pipe() (r *File, w *File, err error) {
|
||||
var p [2]syscall.Handle
|
||||
|
||||
// See ../syscall/exec.go for description of lock.
|
||||
syscall.ForkLock.RLock()
|
||||
e := syscall.Pipe(p[0:])
|
||||
e := syscall.CreatePipe(&p[0], &p[1], nil, 0)
|
||||
if e != nil {
|
||||
syscall.ForkLock.RUnlock()
|
||||
return nil, nil, NewSyscallError("pipe", e)
|
||||
}
|
||||
syscall.CloseOnExec(p[0])
|
||||
syscall.CloseOnExec(p[1])
|
||||
syscall.ForkLock.RUnlock()
|
||||
|
||||
return newFile(p[0], "|0", "file"), newFile(p[1], "|1", "file"), nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user