diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-18 13:13:25 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-18 13:13:25 +0300 |
| commit | 550f064f95113e072677b871b7de30ecf25d62b8 (patch) | |
| tree | 03e39a1bed71b4fc16ea62e7956a6268982f15a3 /internal/eventloop.go | |
| parent | 808c2549bfb17d22388a197d361a07ce0fc8f54f (diff) | |
fix task 45: bound pending handle cleanup
Diffstat (limited to 'internal/eventloop.go')
| -rw-r--r-- | internal/eventloop.go | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index 645f6af..87f99ed 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -13,11 +13,12 @@ import ( const sysEnterNameToHandleAtName = "name_to_handle_at" const ( - defaultCommLookupWorkers = 4 - defaultCommLookupQueueSize = 512 - defaultMaxPendingEnterEvs = 16384 - defaultMaxProcFdCacheSize = 8192 - cacheTrimDivisor = 4 + defaultCommLookupWorkers = 4 + defaultCommLookupQueueSize = 512 + defaultMaxPendingEnterEvs = 16384 + defaultMaxPendingHandleEntries = 8192 + defaultMaxProcFdCacheSize = 8192 + cacheTrimDivisor = 4 ) type eventLoopConfig struct { @@ -38,9 +39,9 @@ type rawEventHandler func(raw []byte, ch chan<- *event.Pair) type eventLoop struct { filter globalfilter.Filter - pairs pairTracker // enter/exit pairing state and inter-syscall duration tracking - pendingHandles map[uint32]string // TID → pathname from name_to_handle_at, for open_by_handle_at correlation - fdTracker *fdTracker // fd table and procfs resolution cache + pairs pairTracker // enter/exit pairing state and inter-syscall duration tracking + pendingHandles *pendingHandleTracker // TID → pathname from name_to_handle_at, for open_by_handle_at correlation + fdTracker *fdTracker // fd table and procfs resolution cache commResolver *commResolver rawHandlers map[types.EventType]rawEventHandler printCb func(ep *event.Pair) // Callback to print the event @@ -66,7 +67,7 @@ func newEventLoop(cfg eventLoopConfig) (*eventLoop, error) { el := &eventLoop{ filter: cfg.filter.Clone(), pairs: newPairTracker(), - pendingHandles: make(map[uint32]string), + pendingHandles: newPendingHandleTracker(), fdTracker: fdState, commResolver: commState, rawHandlers: make(map[types.EventType]rawEventHandler), @@ -118,6 +119,19 @@ func (e *eventLoop) fdState() *fdTracker { return e.fdTracker } +func (e *eventLoop) pendingHandleState() *pendingHandleTracker { + if e.pendingHandles == nil { + e.pendingHandles = newPendingHandleTracker() + } + if e.pendingHandles.paths == nil { + e.pendingHandles.paths = make(map[uint32]string) + } + if e.pendingHandles.pathAges == nil { + e.pendingHandles.pathAges = make(map[uint32]uint64) + } + return e.pendingHandles +} + func (e *eventLoop) commState() *commResolver { if e.commResolver == nil { e.commResolver = newCommResolver(nil) |
