summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-02-16 21:23:55 +0200
committerPaul Buetow <paul@buetow.org>2024-02-16 21:23:55 +0200
commit4ed9a61143f8a0549bf2f0adb4fdb38c7638a03f (patch)
tree6d67475f25fd2c54d7be76a40359ff4f92c01226 /internal
parent93c8f346b3e6c06e46967ce8388367512e0e03d7 (diff)
also do close syscall
Diffstat (limited to 'internal')
-rw-r--r--internal/ioriotng.go22
-rw-r--r--internal/types/bufferpools.go25
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]()