From 6407b3c80ea7051f01615097afc60da671a688e8 Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Fri, 20 Oct 2017 12:44:00 +1100 Subject: [PATCH] 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 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/os/file_windows.go | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/os/file_windows.go b/src/os/file_windows.go index e2be192bcb..c8307a6d22 100644 --- a/src/os/file_windows.go +++ b/src/os/file_windows.go @@ -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 }