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:
parent
ad341843a7
commit
fb451490ec
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user