1
0
mirror of https://github.com/golang/go synced 2024-11-18 15:54:42 -07:00

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
This commit is contained in:
Akshat Kumar 2013-01-30 09:41:16 -08:00 committed by Russ Cox
parent ad341843a7
commit fb451490ec

View File

@ -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}