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:
parent
74b5af9e53
commit
f38fa38bff
1 changed files with 9 additions and 12 deletions
|
|
@ -190,6 +190,15 @@ func (c *DiscordChannel) SendMedia(ctx context.Context, msg bus.OutboundMediaMes
|
||||||
return nil
|
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)
|
sendCtx, cancel := context.WithTimeout(ctx, sendTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
|
@ -204,23 +213,11 @@ func (c *DiscordChannel) SendMedia(ctx context.Context, msg bus.OutboundMediaMes
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case err := <-done:
|
case err := <-done:
|
||||||
// Close all file readers
|
|
||||||
for _, f := range files {
|
|
||||||
if closer, ok := f.Reader.(*os.File); ok {
|
|
||||||
closer.Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("discord send media: %w", channels.ErrTemporary)
|
return fmt.Errorf("discord send media: %w", channels.ErrTemporary)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
case <-sendCtx.Done():
|
case <-sendCtx.Done():
|
||||||
// Close all file readers
|
|
||||||
for _, f := range files {
|
|
||||||
if closer, ok := f.Reader.(*os.File); ok {
|
|
||||||
closer.Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sendCtx.Err()
|
return sendCtx.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue