From 78d4560793de65e21199d3c80e9c901833bdaeba Mon Sep 17 00:00:00 2001 From: Fazlul Shahriar Date: Sat, 9 Nov 2019 16:02:46 -0500 Subject: [PATCH] cmd/go/internal/lockedfile, os: fix O_CREATE flag on Plan 9 os.OpenFile was assuming that a failed syscall.Open means the file does not exist and it tries to create it. However, syscall.Open may have failed for some other reason, such as failing to lock a os.ModeExclusive file. We change os.OpenFile to only create the file if the error indicates that the file doesn't exist. Remove skip of TestTransform test, which was failing because sometimes syscall.Open would fail due to the file being locked, but the syscall.Create would succeed because the file is no longer locked. The create was truncating the file. Fixes #35471 Change-Id: I06583b5f8ac33dc90a51cc4fb64f2d8d9c0c2113 Reviewed-on: https://go-review.googlesource.com/c/go/+/206299 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/cmd/go/internal/lockedfile/transform_test.go | 6 ------ src/os/file_plan9.go | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/cmd/go/internal/lockedfile/transform_test.go b/src/cmd/go/internal/lockedfile/transform_test.go index 189833a630..407d48ea4a 100644 --- a/src/cmd/go/internal/lockedfile/transform_test.go +++ b/src/cmd/go/internal/lockedfile/transform_test.go @@ -10,10 +10,8 @@ package lockedfile_test import ( "bytes" "encoding/binary" - "internal/testenv" "math/rand" "path/filepath" - "runtime" "testing" "time" @@ -37,10 +35,6 @@ func roundDownToPowerOf2(x int) int { } func TestTransform(t *testing.T) { - if runtime.GOOS == "plan9" { - testenv.SkipFlaky(t, 35471) - } - dir, remove := mustTempDir(t) defer remove() path := filepath.Join(dir, "blob.bin") diff --git a/src/os/file_plan9.go b/src/os/file_plan9.go index e0a3826a34..48bf5f5076 100644 --- a/src/os/file_plan9.go +++ b/src/os/file_plan9.go @@ -111,7 +111,7 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) { fd, e = syscall.Create(name, flag, syscallMode(perm)) } else { fd, e = syscall.Open(name, flag) - if e != nil && create { + if IsNotExist(e) && create { var e1 error fd, e1 = syscall.Create(name, flag, syscallMode(perm)) if e1 == nil { -- 2.48.1