diff options
| -rw-r--r-- | internal/ioriotng.go | 22 | ||||
| -rw-r--r-- | internal/types/bufferpools.go | 25 |
2 files changed, 27 insertions, 20 deletions
diff --git a/internal/ioriotng.go b/internal/ioriotng.go index d86cd85..e4f15d2 100644 --- a/internal/ioriotng.go +++ b/internal/ioriotng.go @@ -55,7 +55,10 @@ func Run(flags flags.Flags) { } rb.Poll(300) - enter := make(map[uint32]*types.OpenatEnterEvent) + enterOpen := make(map[uint32]*types.OpenatEnterEvent) + enterFd := make(map[uint32]*types.FdEvent) + // To do this, extract the PID from the TID (pid_tid >> 32) + // openFiles := make(map[ for raw := range ch { switch types.OpId(raw[0]) { @@ -64,20 +67,20 @@ func Run(flags flags.Flags) { if err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, ev); err != nil { log.Fatal(err) } - enter[ev.Tid] = ev + enterOpen[ev.Tid] = ev case types.OPENAT_EXIT_OP_ID: ev := types.FdEventPool.Get().(*types.FdEvent) if err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, ev); err != nil { log.Fatal(err) } - enterEv, ok := enter[ev.Tid] + enterEv, ok := enterOpen[ev.Tid] if !ok { fmt.Println("Dropping", ev) types.FdEventPool.Put(ev) continue } fmt.Println(enterEv, ev) - delete(enter, ev.Tid) + delete(enterOpen, ev.Tid) types.FdEventPool.Put(ev) types.OpenEnterEventPool.Put(enterEv) case types.CLOSE_ENTER_OP_ID: @@ -85,13 +88,22 @@ func Run(flags flags.Flags) { if err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, ev); err != nil { log.Fatal(err) } - types.FdEventPool.Put(ev) + enterFd[ev.Tid] = ev case types.CLOSE_EXIT_OP_ID: ev := types.NullEventPool.Get().(*types.NullEvent) if err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, ev); err != nil { log.Fatal(err) } + enterEv, ok := enterFd[ev.Tid] + if !ok { + fmt.Println("Dropping", ev) + types.NullEventPool.Put(ev) + continue + } + fmt.Println(enterEv, ev) + delete(enterFd, ev.Tid) types.NullEventPool.Put(ev) + types.FdEventPool.Put(enterEv) default: panic(fmt.Sprintf("UNKNOWN Ringbuf data received len:%d raw:%v", len(raw), raw)) } diff --git a/internal/types/bufferpools.go b/internal/types/bufferpools.go index bca22fe..da0779d 100644 --- a/internal/types/bufferpools.go +++ b/internal/types/bufferpools.go @@ -2,20 +2,15 @@ package types import "sync" -var OpenEnterEventPool = sync.Pool{ - New: func() interface{} { - return &OpenatEnterEvent{} - }, +func syncPool[T any]() sync.Pool { + return sync.Pool{ + New: func() interface{} { + var value T + return &value + }, + } } -var FdEventPool = sync.Pool{ - New: func() interface{} { - return &FdEvent{} - }, -} - -var NullEventPool = sync.Pool{ - New: func() interface{} { - return &NullEvent{} - }, -} +var OpenEnterEventPool = syncPool[OpenatEnterEvent]() +var FdEventPool = syncPool[FdEvent]() +var NullEventPool = syncPool[NullEvent]() |
