Skip to content

Commit

Permalink
vfs/vfstest: adjust WithOpenFileTracking to not wrap typed nils
Browse files Browse the repository at this point in the history
Previously, in error cases that returned a typed nil, WithOpenFileTracking
would wrap the typed nil file with open file tracking, incorrectly identifying
file leaks that don't exist.
  • Loading branch information
jbowens committed Mar 21, 2024
1 parent c268820 commit dc7ccb2
Showing 1 changed file with 9 additions and 14 deletions.
23 changes: 9 additions & 14 deletions vfs/vfstest/open_files.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,27 +48,23 @@ func (fs *openFilesFS) dumpStacks(w io.Writer) {
}

func (fs *openFilesFS) Create(name string) (vfs.File, error) {
f, err := fs.inner.Create(name)
return fs.wrapOpenFile(f), err
return fs.wrapOpenFile(fs.inner.Create(name))
}

func (fs *openFilesFS) Link(oldname, newname string) error {
return fs.inner.Link(oldname, newname)
}

func (fs *openFilesFS) Open(name string, opts ...vfs.OpenOption) (vfs.File, error) {
f, err := fs.inner.Open(name, opts...)
return fs.wrapOpenFile(f), err
return fs.wrapOpenFile(fs.inner.Open(name, opts...))
}

func (fs *openFilesFS) OpenReadWrite(name string, opts ...vfs.OpenOption) (vfs.File, error) {
f, err := fs.inner.OpenReadWrite(name, opts...)
return fs.wrapOpenFile(f), err
return fs.wrapOpenFile(fs.inner.OpenReadWrite(name, opts...))
}

func (fs *openFilesFS) OpenDir(name string) (vfs.File, error) {
f, err := fs.inner.OpenDir(name)
return fs.wrapOpenFile(f), err
return fs.wrapOpenFile(fs.inner.OpenDir(name))
}

func (fs *openFilesFS) Remove(name string) error {
Expand All @@ -84,8 +80,7 @@ func (fs *openFilesFS) Rename(oldname, newname string) error {
}

func (fs *openFilesFS) ReuseForWrite(oldname, newname string) (vfs.File, error) {
f, err := fs.inner.ReuseForWrite(oldname, newname)
return fs.wrapOpenFile(f), err
return fs.wrapOpenFile(fs.inner.ReuseForWrite(oldname, newname))
}

func (fs *openFilesFS) MkdirAll(dir string, perm os.FileMode) error {
Expand Down Expand Up @@ -120,16 +115,16 @@ func (fs *openFilesFS) GetDiskUsage(path string) (vfs.DiskUsage, error) {
return fs.inner.GetDiskUsage(path)
}

func (fs *openFilesFS) wrapOpenFile(f vfs.File) vfs.File {
if f == nil {
return f
func (fs *openFilesFS) wrapOpenFile(f vfs.File, err error) (vfs.File, error) {
if f == nil || err != nil {
return f, err
}
of := &openFile{File: f, parent: fs}
of.n = runtime.Callers(2, of.pcs[:])
fs.mu.Lock()
defer fs.mu.Unlock()
fs.files[of] = struct{}{}
return of
return of, nil
}

type openFile struct {
Expand Down

0 comments on commit dc7ccb2

Please sign in to comment.