From: Akshat Kumar Date: Wed, 30 Jan 2013 17:41:16 +0000 (-0800) Subject: os: don't hold ForkLock across opens on Plan 9 X-Git-Tag: go1.1rc2~1238 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fb451490ec646dba0d8fe9c6d0291c40e7631533;p=gostls13.git os: don't hold ForkLock across opens on Plan 9 If os.OpenFile holds ForkLock on files that block opens, then threads that simultaneously try to do fork-exec will get hung up (until the open succeeds). Blocked opens are common enough on Plan 9 that protecting against fd leaks into fork-execs means not being able to do fork-execs properly in the general case. Thus, we forgo taking the lock. R=rsc, ality CC=golang-dev https://golang.org/cl/7235066 --- diff --git a/src/pkg/os/file_plan9.go b/src/pkg/os/file_plan9.go index fb2f2347d7..fabe5b979c 100644 --- a/src/pkg/os/file_plan9.go +++ b/src/pkg/os/file_plan9.go @@ -104,7 +104,6 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { append = true } - syscall.ForkLock.RLock() if (create && trunc) || excl { fd, e = syscall.Create(name, flag, syscallMode(perm)) } else { @@ -117,7 +116,6 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { } } } - syscall.ForkLock.RUnlock() if e != nil { return nil, &PathError{"open", name, e}