From 6d53aeb16bee34eeee14b457cd0e7b0811bee873 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 21 Feb 2026 12:57:21 +0200 Subject: Handle close_range cleanup Amp-Thread-ID: https://ampcode.com/threads/T-019c7faf-baaa-704f-af15-8aeba9df4628 Co-authored-by: Amp --- internal/eventloop.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'internal/eventloop.go') 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) { -- cgit v1.2.3