diff options
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) { |
