aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/notify/files.go15
-rw-r--r--internal/notify/store_test.go7
2 files changed, 19 insertions, 3 deletions
diff --git a/internal/notify/files.go b/internal/notify/files.go
index 22e0ea9..53e7f3f 100644
--- a/internal/notify/files.go
+++ b/internal/notify/files.go
@@ -54,14 +54,23 @@ func writeJSON(path string, v any) error {
if err != nil {
return err
}
+ tmpName := tmp.Name()
+ renamed := false
+ defer func() {
+ if !renamed {
+ os.Remove(tmpName)
+ }
+ }()
if _, err := tmp.Write(data); err != nil {
tmp.Close()
- os.Remove(tmp.Name())
return err
}
if err := tmp.Close(); err != nil {
- os.Remove(tmp.Name())
return err
}
- return os.Rename(tmp.Name(), path)
+ if err := os.Rename(tmpName, path); err != nil {
+ return err
+ }
+ renamed = true
+ return nil
}
diff --git a/internal/notify/store_test.go b/internal/notify/store_test.go
index 4e4dd79..1fb8bdc 100644
--- a/internal/notify/store_test.go
+++ b/internal/notify/store_test.go
@@ -112,6 +112,13 @@ func TestQueueCapEvictsToHistory(t *testing.T) {
if len(*emitted) == 0 {
t.Fatal("eviction emitted nothing")
}
+ history := s.historySnapshot()
+ if len(history) != 1 {
+ t.Fatalf("history length = %d, want 1", len(history))
+ }
+ if !history[0].Closed {
+ t.Error("evicted entry not marked closed in history")
+ }
}
func TestHistoryRingCapsAtTwenty(t *testing.T) {