Commit 78d45607 authored by Fazlul Shahriar's avatar Fazlul Shahriar Committed by Brad Fitzpatrick

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/+/206299Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 29cfb4d3
......@@ -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")
......
......@@ -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 {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment