diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-21 12:57:21 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-21 12:57:21 +0200 |
| commit | 6d53aeb16bee34eeee14b457cd0e7b0811bee873 (patch) | |
| tree | 2c5a8fb6afb7999d11bbf5bdd41bd3545986fd87 /internal/eventloop.go | |
| parent | 6c4f68164df93ed70123db61fb32a9688f5b0623 (diff) | |
Handle close_range cleanup
Amp-Thread-ID: https://ampcode.com/threads/T-019c7faf-baaa-704f-af15-8aeba9df4628
Co-authored-by: Amp <amp@ampcode.com>
Diffstat (limited to 'internal/eventloop.go')
| -rw-r--r-- | internal/eventloop.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index cf128d2..91af7c9 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -254,6 +254,18 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair) case *FdEvent: fd := ep.EnterEv.(*FdEvent).Fd + if ep.Is(SYS_ENTER_CLOSE_RANGE) { + // close_range provides (first, last), but fd_event only carries the first + // argument, so we approximate by closing all tracked fds >= first. + retEv, ok := ep.ExitEv.(*types.RetEvent) + if ok && retEv.Ret == 0 { + for fdToClose := range e.files { + if fdToClose >= fd { + delete(e.files, fdToClose) + } + } + } + } if file_, ok := e.files[fd]; ok { ep.File = file_ if ep.Is(SYS_ENTER_CLOSE) { |
