From fb451490ec646dba0d8fe9c6d0291c40e7631533 Mon Sep 17 00:00:00 2001 From: Akshat Kumar Date: Wed, 30 Jan 2013 09:41:16 -0800 Subject: [PATCH] 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 --- src/pkg/os/file_plan9.go | 2 -- 1 file changed, 2 deletions(-) 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} -- 2.48.1