summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/eventloop.go16
-rw-r--r--internal/eventloop_test.go6
2 files changed, 14 insertions, 8 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index 169f20f..010b892 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -258,6 +258,14 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair)
case *FdEvent:
fd := ep.EnterEv.(*FdEvent).Fd
+ if file_, ok := e.files[fd]; ok {
+ ep.File = file_
+ if ep.Is(SYS_ENTER_CLOSE) {
+ delete(e.files, fd)
+ }
+ } else {
+ ep.File = file.NewFdWithPid(fd, v.Pid)
+ }
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.
@@ -270,14 +278,6 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair)
}
}
}
- if file_, ok := e.files[fd]; ok {
- ep.File = file_
- if ep.Is(SYS_ENTER_CLOSE) {
- delete(e.files, fd)
- }
- } else {
- ep.File = file.NewFdWithPid(fd, v.Pid)
- }
ep.Comm = e.comm(ep.EnterEv.GetTid())
if !e.filter.eventPair(ep) {
ep.Recycle()
diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go
index 7daa32b..60047fe 100644
--- a/internal/eventloop_test.go
+++ b/internal/eventloop_test.go
@@ -487,6 +487,12 @@ func makeCloseRangeEventTestData(t *testing.T) (td testData) {
if !exitCloseRange.Equals(ep.ExitEv) {
t.Errorf("Expected '%v' but got '%v'", exitCloseRange, ep.ExitEv)
}
+ // close_range's fd is the first fd in the range (fd2); its path must resolve
+ if ep.File == nil {
+ t.Errorf("Expected file to be set for close_range event")
+ } else if ep.File.Name() != filename2 {
+ t.Errorf("Expected file name '%v' but got '%v'", filename2, ep.File.Name())
+ }
verifyFileDescriptor(t, el, fd1, filename1)
verifyFdNotTracked(t, el, fd2)