summaryrefslogtreecommitdiff
path: root/internal/eventloop_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 11:24:31 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 11:24:31 +0200
commit9cbf9ec8e9eac92431b9a742c1b625888cb69dfa (patch)
tree1bd9b8c24faecaf65a9563dd922afcfacddaa4ce /internal/eventloop_test.go
parent742ef1480ee52558b77e1be1671e17065af36a1d (diff)
eventloop: remove gosched by snapshotting emitted fd state
Diffstat (limited to 'internal/eventloop_test.go')
-rw-r--r--internal/eventloop_test.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go
index 32dddd4..3a4ad38 100644
--- a/internal/eventloop_test.go
+++ b/internal/eventloop_test.go
@@ -203,6 +203,31 @@ func TestHandleFdExitCloseRangeClearsProcFdCacheRange(t *testing.T) {
verifyProcFdCached(t, el, pid+1, 20)
}
+func TestFreezePairForEmissionCopiesFdFile(t *testing.T) {
+ el := mustNewEventLoop(t, eventLoopConfig{})
+ fdFile := file.NewFd(9, "/tmp/x", syscall.O_RDONLY)
+ ep := event.NewPair(&types.NullEvent{})
+ ep.File = fdFile
+
+ el.freezePairForEmission(ep)
+
+ emitted, ok := ep.File.(*file.FdFile)
+ if !ok {
+ t.Fatalf("expected emitted file to be *file.FdFile, got %T", ep.File)
+ }
+ if emitted == fdFile {
+ t.Fatalf("expected emitted fd file to be detached copy")
+ }
+ if emitted.Flags() != file.Flags(syscall.O_RDONLY) {
+ t.Fatalf("expected copied flags %v, got %v", syscall.O_RDONLY, emitted.Flags())
+ }
+
+ fdFile.SetFlags(syscall.O_WRONLY)
+ if emitted.Flags() != file.Flags(syscall.O_RDONLY) {
+ t.Fatalf("expected emitted copy flags unchanged after source mutation")
+ }
+}
+
// Tests a simple enter/exit pair of tracepoints.
func makeOpenEventTestData1(t *testing.T) (td testData) {
enterEv, enterEvBytes := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid)