diff options
| author | Carlos Amedee <carlos@golang.org> | 2025-07-16 12:05:48 -0700 |
|---|---|---|
| committer | Carlos Amedee <carlos@golang.org> | 2025-07-18 14:43:56 -0700 |
| commit | 0451816430486a25966dd76aa92735ac0588b8e5 (patch) | |
| tree | 51eba396bfe6a0f1d28295c62f4d69dd1e8ad994 /src/os/file_unix.go | |
| parent | 34b70684ba2fc8c5cba900e9abdfb874c1bd8c0e (diff) | |
| download | go-0451816430486a25966dd76aa92735ac0588b8e5.tar.xz | |
os: revert the use of AddCleanup to close files and roots
This reverts commit fdaac84480b02e600660d0ca7c15339138807107.
Updates #70907
Updates #74574
Updates #74642
Reason for revert: Issue #74574
Change-Id: I7b55b85736e4210d9b6f3fd7a24050ac7bdefef9
Reviewed-on: https://go-review.googlesource.com/c/go/+/688435
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/os/file_unix.go')
| -rw-r--r-- | src/os/file_unix.go | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 721f08c911..2074df70fe 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -54,7 +54,7 @@ func rename(oldname, newname string) error { // file is the real representation of *File. // The extra level of indirection ensures that no clients of os -// can overwrite this data, which could cause the cleanup +// can overwrite this data, which could cause the finalizer // to close the wrong file descriptor. type file struct { pfd poll.FD @@ -63,7 +63,6 @@ type file struct { nonblock bool // whether we set nonblocking mode stdoutOrErr bool // whether this is stdout or stderr appendMode bool // whether file is opened for appending - cleanup runtime.Cleanup // cleanup closes the file when no longer referenced } // fd is the Unix implementation of Fd. @@ -222,8 +221,7 @@ func newFile(fd int, name string, kind newFileKind, nonBlocking bool) *File { } } - // Close the file when the File is not live. - f.cleanup = runtime.AddCleanup(f, func(f *file) { f.close() }, f.file) + runtime.SetFinalizer(f.file, (*file).close) return f } @@ -320,9 +318,8 @@ func (file *file) close() error { err = &PathError{Op: "close", Path: file.name, Err: e} } - // There is no need for a cleanup at this point. File must be alive at the point - // where cleanup.stop is called. - file.cleanup.Stop() + // no need for a finalizer anymore + runtime.SetFinalizer(file, nil) return err } |
