Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sysfs: always reopen directory before readdir #2355

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions internal/sysfs/osfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"io"
"io/fs"
"os"
"runtime"

experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
"github.com/tetratelabs/wazero/internal/fsapi"
Expand All @@ -15,7 +14,15 @@ func newOsFile(path string, flag experimentalsys.Oflag, perm fs.FileMode, f *os.
// Windows cannot read files written to a directory after it was opened.
// This was noticed in #1087 in zig tests. Use a flag instead of a
// different type.
reopenDir := runtime.GOOS == "windows"
//
// As POSIX states, if a file is removed from or added to the directory
// after the most recent call to opendir() or rewinddir(), whether a
// subsequent call to readdir() returns an entry for that file is unspecified.
//
// So there is no guarantee that files added after opendir() will be visible
// in readdir(). We need to reopendir() to get the new state of the directory
// before readdir().
reopenDir := true
return &osFile{path: path, flag: flag, perm: perm, reopenDir: reopenDir, file: f, fd: f.Fd()}
}

Expand Down