From cc3b3cdc764edc5e5261f920384a098ea6968b77 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 8 Mar 2026 11:27:26 +0200 Subject: eventstream: surface close errors during CSV export --- internal/tui/eventstream/export.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/internal/tui/eventstream/export.go b/internal/tui/eventstream/export.go index 679fddb..3924935 100644 --- a/internal/tui/eventstream/export.go +++ b/internal/tui/eventstream/export.go @@ -40,14 +40,26 @@ func (m *Model) exportFilteredToCSV(filename string) (string, error) { if err != nil { return "", err } - defer f.Close() + closed := false + closeFile := func() error { + if closed { + return nil + } + closed = true + return f.Close() + } + fail := func(baseErr error) (string, error) { + if closeErr := closeFile(); closeErr != nil { + return "", errors.Join(baseErr, closeErr) + } + return "", baseErr + } w := csv.NewWriter(f) - defer w.Flush() header := []string{"seq", "time_ns", "gap_ns", "latency_ns", "comm", "pid", "tid", "syscall", "fd", "ret", "bytes", "file", "error"} if err := w.Write(header); err != nil { - return "", err + return fail(err) } for i := range m.filtered { ev := m.filtered[i] @@ -67,10 +79,14 @@ func (m *Model) exportFilteredToCSV(filename string) (string, error) { fmt.Sprintf("%t", ev.IsError), } if err := w.Write(record); err != nil { - return "", err + return fail(err) } } + w.Flush() if err := w.Error(); err != nil { + return fail(err) + } + if err := closeFile(); err != nil { return "", err } absPath, err := filepath.Abs(path) -- cgit v1.2.3