summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-21 12:57:21 +0200
committerPaul Buetow <paul@buetow.org>2026-02-21 12:57:21 +0200
commit6d53aeb16bee34eeee14b457cd0e7b0811bee873 (patch)
tree2c5a8fb6afb7999d11bbf5bdd41bd3545986fd87 /internal/eventloop.go
parent6c4f68164df93ed70123db61fb32a9688f5b0623 (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.go12
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) {