fix: prevent file descriptor leak in discord SendMedia

Replace duplicated file cleanup code in select branches with a single
defer, ensuring files are always closed even on unexpected panics.
This commit is contained in:
Yasuhiro Matsumoto 2026-03-05 20:57:47 +09:00
parent 74b5af9e53
commit f38fa38bff
No known key found for this signature in database
GPG key ID: F2EA90DF2C146D1E

View file

@ -190,6 +190,15 @@ func (c *DiscordChannel) SendMedia(ctx context.Context, msg bus.OutboundMediaMes
return nil
}
// Ensure all opened files are closed when done
defer func() {
for _, f := range files {
if closer, ok := f.Reader.(*os.File); ok {
closer.Close()
}
}
}()
sendCtx, cancel := context.WithTimeout(ctx, sendTimeout)
defer cancel()
@ -204,23 +213,11 @@ func (c *DiscordChannel) SendMedia(ctx context.Context, msg bus.OutboundMediaMes
select {
case err := <-done:
// Close all file readers
for _, f := range files {
if closer, ok := f.Reader.(*os.File); ok {
closer.Close()
}
}
if err != nil {
return fmt.Errorf("discord send media: %w", channels.ErrTemporary)
}
return nil
case <-sendCtx.Done():
// Close all file readers
for _, f := range files {
if closer, ok := f.Reader.(*os.File); ok {
closer.Close()
}
}
return sendCtx.Err()
}
}