aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/lockedfile/lockedfile.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-02-18 20:00:32 +0900
committerOphestra <cat@gensokyo.uk>2026-02-18 20:00:32 +0900
commit3bfe99d3d855a03a806dc66c8c215ba69d2dd67b (patch)
tree32ae1a7b622d086f69f71b82fd969b95d6970d46 /internal/lockedfile/lockedfile.go
parent149dfbb6af2a777007e2a9d27207fdf74426078e (diff)
internal/lockedfile: keep objects alive while stopping cleanups
Fixes https://go.dev/issues/74780. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/lockedfile/lockedfile.go')
-rw-r--r--internal/lockedfile/lockedfile.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/internal/lockedfile/lockedfile.go b/internal/lockedfile/lockedfile.go
index 8bd2ffbe..f48124ff 100644
--- a/internal/lockedfile/lockedfile.go
+++ b/internal/lockedfile/lockedfile.go
@@ -94,6 +94,11 @@ func (f *File) Close() error {
err := closeFile(f.osFile.File)
f.cleanup.Stop()
+ // f may be dead at the moment after we access f.cleanup,
+ // so the cleanup can fire before Stop completes. Keep f
+ // alive while we call Stop. See the documentation for
+ // runtime.Cleanup.Stop.
+ runtime.KeepAlive(f)
return err
}