Skip to content

Commit d89bb01

Browse files
committed
fix: close ModList.txt file handle before renaming it
1 parent 07c4cd6 commit d89bb01

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

internal/workspace/modlist.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,22 +102,28 @@ func (m *ModList) Save() error {
102102
log.WithField("file", "ModList.txt").Debugf("saving ModList.txt")
103103

104104
tmpFilePath := filepath.Join(m.dir, "ModList.txt.new")
105-
file, err := os.Create(tmpFilePath)
106-
if err != nil {
107-
return err
108-
}
109-
defer file.Close()
110105

111-
writer := bufio.NewWriter(file)
106+
// anonymous func to make sure file is always closed no matter what before we rename it
107+
err := func() error {
108+
file, err := os.Create(tmpFilePath)
109+
if err != nil {
110+
return err
111+
}
112+
defer file.Close()
113+
114+
writer := bufio.NewWriter(file)
112115

113-
for _, line := range m.lines {
114-
if _, err = writer.WriteString(fmt.Sprintf("%s\n", line)); err != nil {
116+
for _, line := range m.lines {
117+
if _, err = writer.WriteString(fmt.Sprintf("%s\n", line)); err != nil {
118+
return err
119+
}
120+
}
121+
if err = writer.Flush(); err != nil {
115122
return err
116123
}
117-
}
118-
if err = writer.Flush(); err != nil {
119-
return err
120-
}
124+
125+
return nil
126+
}()
121127

122128
if err = os.Rename(tmpFilePath, filepath.Join(m.dir, "ModList.txt")); err != nil {
123129
return err

0 commit comments

Comments
 (0)